给出一个列表,找不到的

时间:2015-02-10 16:35:22

标签: sql oracle unpivot

我有一个行表:

COL1, COL2
1,    ABC
2,    CDE
3,    XYZ

给定字符串输入('ABC', 'CDE', 'BBB')是否可以编写SQL,告诉我'BBB'未找到?与之相反:

select COL2 from TABLE where COL2 in ('ABC', 'CDE', 'BBB');

请注意,列表可以包含任意数量的项目,因此{(1}}(在Oracle上)似乎不是答案。

我的替代方案是什么?

2 个答案:

答案 0 :(得分:0)

您可以通过将值放在CTE或表格中来完成此操作:

with values as (
      select 'ABC' as val from dual union all
      select 'CDE' from dual union all
      select 'BBB' from dual
     )
select *
from values v
where not exists (select 1 from table t where t.col2 = values.val);

答案 1 :(得分:0)

以下是动态完成的方法:

WITH x1 AS (
    SELECT REGEXP_SUBSTR('ABC,CDE,BBB', '[^,]+', 1, LEVEL) AS val FROM dual
   CONNECT BY REGEXP_SUBSTR('ABC,CDE,BBB', '[^,]+', 1, LEVEL) IS NOT NULL
)
SELECT x1.val
 WHERE NOT EXISTS ( SELECT 1 FROM mytable t1
                     WHERE t1.val = x1.val );

只需将ABC,CDE,BBB替换为您的值列表即可。