2013-04-08 2 views
0

У меня есть таблица пар код аэропорта:запроса недостающих элементов в таблице

|iata|icao| 
----------- 
|ORD |KORD| 
|JFK |KJFK| 
|LAX |KLAX| 
|SFO |KSFO| 

Я хочу, чтобы выполнить запрос, который будет возвращать коды, которые не существуют в этой таблице, так что если я запустить запрос (против столбца iata), содержащий ATL, ORD, MIA, SFO, он вернет ATL и MIA, поскольку ни один из них не существует в моей таблице. Это возможно?

+2

Вы можете иметь таблицу, которая имеет все возможные коды аэропортов, а затем присоединиться в таблице выше, чтобы проверить, что отсутствует. Или вам нужно индивидуально проверять каждый код аэропорта на стол. –

+1

[Вот пример] (http://stackoverflow.com/questions/8902654/mysql-select-items-not-in-a-list) о том, как это может работать в MySQL; концепции должны также перейти на 'sqlite3'. – summea

+0

Отлично, я могу работать с этим. Благодаря! – Ralgha

ответ

2

Если у вас есть запрос, который работает код, здесь есть один способ:

select mc.* 
    from (<your query goes here>) mc 
    where mc.iata not in (select iata from AirportCodePairs acp) 

Вы также можете сделать это с помощью left outer join и сравнить с NULL. Я бы порекомендовал индекс в iata в таблице пар.

Или, если у вас нет запроса, вы можете сделать:

select mc.* 
    from (select 'ATL' as code union all 
      select 'ORD' union all 
      select 'MIA' union all 
      select 'SFO' 
     ) mc 
    where mc.iata not in (select iata from AirportCodePairs acp) 
+0

Я не совсем понимаю это, откуда взялось «mc» и что вы подразумеваете под запросом, который запускает код? – Ralgha

+0

@ Ralgha. , , В вашем вопросе говорится, что у вас есть запрос, который возвращает интересующие вас коды. Этот запрос идет туда, где '' ваш запрос идет здесь''. «Mc» является псевдонимом таблицы и является базовой частью языка SQL. –

+0

А это работает и не требует временного стола, спасибо большое! – Ralgha

0

Вы можете создать таблицу со значениями вы ищете, а затем сделать JOIN:

CREATE TABLE tmp (code char(3) NOT NULL); 

INSERT INTO tmp (code) VALUES ('ATL'), ('ORD'), ('MIA'), ('SFO'); 

SELECT code FROM tmp 
LEFT OUTER JOIN airportcode as ac ON tmp.code = ac.iata 
WHERE ac.iata IS NULL 
0

в оракула можно использовать команду минус пример

select your_columns from tableA minus select your_columns from tableB 

к сведению, что оба должны иметь одинаковые столбцы и типы и длины, или это не сработает.

Если тип другой, то листинг, to_char, to_date или любая функция необходима, чтобы получить типы одинаковые. Обратите внимание, что если вам нужно выполнить один из этих или любой вызов функции oracle в разделе where, то используйте индексы, основанные на функциях. Например, если to_upper вызывается в том, где будет создан раздел, как этот

select * from tableName a where to_upper(last_name)='SIMPSON' 

индекса на это следующим образом

create index ixt on tableName(to_uppper(last_name)); 
Смежные вопросы