SELECT返回表中不存在的值的列表

时间:2019-02-27 19:59:23

标签: sql oracle

查询:

select id from users where id in (1,2,3,4,5)

如果users表包含ID 1、2、3,则它将返回1、2和3。我想要一个将返回4和5的查询。换句话说,我不希望该查询返回任何值。表中存在的行,我想给它一个数字列表,并从该列表中获取未出现在表中的值。

2 个答案:

答案 0 :(得分:1)

您将必须使用MINUS运算符。您也可以将其与odcinumberlist一起使用,而不必将值存储在临时表中

SELECT column_value
FROM table(sys.odcinumberlist(1,2,3,4,5)) 
MINUS
SELECT ids
FROM users;

答案 1 :(得分:1)

首先,您需要将数字列表表示为一种关系(可能不完全是Oracle文档所用的术语,但是...)

VALUES 1,2,3,4,5

那么您可以通过多种方式在查询中使用它

SELECT *
 FROM (VALUES 1,2,3,4,5) as V(A)
WHERE A NOT IN ( -- query your table here
                   )

SELECT *
  FROM (VALUES 1,2,3,4,5) as V(A)
     LEFT JOIN -- your table
        ON V.A = table.column
 WHERE table.column is NULL

VALUES 1,2,3,4,5
 MINUS
 -- query your table

我不是在装有ORacle的计算机上,所以其中的任何一个语法可能都有些偏离,但是这里有一些想法...