确定Oracle数据库列中缺少哪些值

时间:2014-11-10 10:22:51

标签: sql oracle

我有一个值列表,我想查询该列表中的哪些值不会出现在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个条目要搜索,而不是上面玩具示例中的三个。

2 个答案:

答案 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