我在oracle中有这个查询:
select * from table where col2 in (1,2,3,4);
让我说我得到了这个结果
col1 | col2
-----------
a 1
b 2
我的'(1,2,3,4)'部分有20个或更多选项,如何确定我在表格中找不到哪些值?在我的例子3和4中不存在于表
中答案 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
这将根据您的标准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
祝你好运。