2015-02-10 31 views
0

我行的表:给出一个列表,什么没有发现

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

给定一个字符串输入('ABC', 'CDE', 'BBB')是可以编写SQL会告诉我'BBB'没有被发现?相反到:

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

注意,这个名单可以包含任意数量的项目,所以有UNPIVOT(甲骨文)似乎并没有得到答案。

我的选择是什么?

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); 
+0

啊,谢谢 - 我会试试这个,如果需要关闭。 – user3123546 2015-02-10 16:49:58

回答

0

您可以通过将这些值的CTE或表做到这一点可能。

+0

只是与输入列表不动态。 – 2015-02-10 16:42:37

+0

我喜欢这个答案,但正如Maheswaren所说,它不是动态的。如何将输入列表变成可用的东西 - 甚至填充表格? – user3123546 2015-02-10 16:46:44

+0

@ user3123546。 。 。不要将该值作为列表输入,而应将其输入为一系列'select'语句。 – 2015-02-10 16:56:12

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

相关问题