如何从Oracle的给定列表中获取不存在的记录列表?

时间:2016-09-21 18:20:00

标签: sql oracle

如何从给定输入条件中获取不可用(不存在)记录列表?

如果我们使用Not IN Operator,它将导致表中所有不匹配的记录。但我想从给定输入条件中获取不匹配的记录。我举了一些示例。

表名:国家/地区

enter image description here

2 个答案:

答案 0 :(得分:2)

从逻辑上讲,您希望从输入列表中返回country表中不存在的国家/地区代码。这可以用not exists非常简单地表达出来。

唯一的困难是您需要将国家/地区代码的输入列表转换为行列表。您可以使用一系列union all来完成此操作。或者,由于您使用的是Oracle,因此可以使用SYS.DBMS_DEBUG_VC2COLL执行列表到表的转换,我认为这使得查询更具可读性:

select i.column_value as country_code
  from table(SYS.DBMS_DEBUG_VC2COLL('AU', 'IN', 'ZA', 'DK', 'CH', 'NL')) i
 where not exists (select null
                     from country c
                    where c.country_code = i.column_value)

答案 1 :(得分:1)

可以使用一组选择联合和减号

( select 'AU'  from dual 
 union 
 select 'IN' from dual 
 union 
 select 'ZA' from dual    
 union 
 select 'DK' from dual 
 union 
 select 'CH' from dual    
 union 
 select 'NL' from dual  ) 
 minus
 SELECT countrycode
 FROM country
 WHERE countrycode IN ('AU','IN','ZA','DK','CH','NL')