如何从给定输入条件中获取不可用(不存在)记录列表?
如果我们使用Not IN Operator,它将导致表中所有不匹配的记录。但我想从给定输入条件中获取不匹配的记录。我举了一些示例。
表名:国家/地区
答案 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')