0

我有一个机场代码对表:

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

我想运行一个查询,该查询将返回此表中不存在的代码,因此如果我运行包含 ATL、ORD、MIA、SFO 的查询(针对 iata 列),它将返回 ATL 和 MIA,因为它们都不存在在我的桌子上。这可能吗?

4

3 回答 3

2

如果您有一个运行代码的查询,这是一种方法:

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

您也可以通过 aleft 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)
于 2013-04-08T17:49:24.950 回答
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 
于 2013-04-08T17:04:53.597 回答
0

在 oracle 中,您可以使用减号命令示例

select your_columns from tableA minus select your_columns from tableB

请注意,两者必须具有相同的列、类型和长度,否则将不起作用。

如果类型不同,请执行强制转换、to_char、to_date 或任何使类型相同所需的函数。请注意,如果您必须在 where 子句中执行其中一项或任何 oracle 函数调用,则使用基于函数的索引。例如,如果在这样的 where 子句中调用 to_upper

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

将按如下方式创建关于此的索引

create index ixt on tableName(to_uppper(last_name));
于 2013-04-08T20:13:25.887 回答