2015-02-10 64 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

相關問題