确定sql表中没有的值

时间:2013-02-07 16:31:09

标签: sql oracle

我在oracle中有这个查询:

select * from table where col2 in (1,2,3,4);

让我说我得到了这个结果

col1 | col2
-----------
a       1
b       2

我的'(1,2,3,4)'部分有20个或更多选项,如何确定我在表格中找不到哪些值?在我的例子3和4中不存在于表

3 个答案:

答案 0 :(得分:1)

你不能以你想要的方式。

您需要将要查找的值插入表中,然后选择所需表中不存在的所有值。

假设您要查找的数据位于A,并且您想知道B中不存在哪些数据。

SELECT *
FROM   table_a A
WHERE  NOT EXISTS (SELECT * 
                   FROM table_b B 
                   WHERE B.col1 = A.col1);

答案 1 :(得分:1)

IN列表很愚蠢,或者至少不是很有用。使用SQL Type集合来存储您的值,因为我们可以将它们转换为表。

在这个例子中,我使用的是模糊的SYS.KU $ _OBJNUMSET类型,这是我在10g上知道的唯一嵌套表。 (11g还有更多)。

所以

select t.column_value 
from table ( SYS.KU$_OBJNUMSET  (1,2,3,4) ) t
        left join your_table 
          on col2 = t.column_value
where col2 is null;

答案 2 :(得分:0)

如果您只是为特定示例使用整数,那么这将是一种方法:

SELECT *
FROM (
  Select Rownum r
  From dual
  Connect By Rownum IN (1,2,3,4)
) T
LEFT JOIN YourTable T2 ON T.r = T2.Col2
WHERE T2.Col2 IS NULL

Fiddle

这将根据您的标准1,2,3,4创建一个表格,并将其用于LEFT JOIN

- 编辑

因为值不是整数,所以这是另一个“丑陋”选项:

SELECT *
FROM (
  Select 'a' r From dual UNION
  Select 'b' r From dual UNION
  Select 'c' r From dual UNION
  Select 'd' r From dual
) T
LEFT JOIN YourTable T2 ON T.r = T2.Col2
WHERE T2.Col2 IS NULL

http://www.sqlfiddle.com/#!4/5e769/2

祝你好运。