我有一个行表:
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上)似乎不是答案。
我的替代方案是什么?
答案 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
替换为您的值列表即可。