我有一个值列表,我想查询该列表中的哪些值不会出现在Oracle数据库的特定列中(不确定是哪个版本)。
例如,如果我的值列表是A,B,C
,并且我有一个表格如下:
--------
|COLUMN|
--------
| C|
| A|
--------
我期望的结果是B
。
到目前为止,我的方法是一个类似于下面的SQL查询:
SELECT <<List of values SQL, not sure what goes here>>
EXCEPT
SELECT column FROM table
但是我不知道第一个语句的SQL是什么样的。 到目前为止,我提出了:
SELECT "A","B","C" FROM dual
但这并没有产生预期的效果,因为它创建了3列
另一点要提到的是,在实际问题中,列表中有大约100个条目要搜索,而不是上面玩具示例中的三个。
答案 0 :(得分:3)
也许这会有所帮助:
WITH static_list AS (
SELECT 'A' AS v FROM dual UNION ALL
SELECT 'B' AS v FROM dual UNION ALL
SELECT 'C' AS v FROM dual
)
SELECT v FROM static_list
MINUS (SELECT column
FROM table);
答案 1 :(得分:0)
Dirk的解决方案运行正常。但是,正则表达式也可用于实现Oracle 10g及更高版本的此目标:
SELECT trim(regexp_substr(str, '[^,]+', 1, level)) str
FROM (SELECT 'A,B,C,D' str from dual)
CONNECT BY instr(str, ',', 1, level - 1) > 0
Minus
Select column from table