我有一张包含100个数字的表格。现在我有一个包含11个数字的列表,其中一个不在表格中(与100个数字不同)。
当我在11个数字select * from table where number in (' ',' ',' '......)
列表后查询时,它会返回表格中的10个数字。
现在我的问题是:如何从列表中找到不在表中的数字? (仅限SQL,因为我现在使用Excel来执行此操作)。
谢谢!
答案 0 :(得分:7)
您需要使用values子句:
with yourlist as (
select 1 as i from dual
union all
select 2 as i from dual
...
union all
select 3 as i from dual
)
select yourlist.i
from yourlist
left join yourtable
on yourtable.num = yourlist.i
where yourtable.num is null
答案 1 :(得分:2)
一种方法是将您的数字列表放在第二个表中,然后使用左连接找到它不匹配的位置
SELECT number FROM list
LEFT JOIN table USING(number)
WHERE table.number IS NULL;
答案 2 :(得分:1)
在oracle数据库中,您也可以使用 NOT IN ..
表示您已经使用并了解 IN 关键字,同样,对于您想要的输出,您可以使用NOT IN ......
您也可以使用以下查询 -
案例1:表中有10个数字 - (比如表名是list1)
select list1.num from list1
where list1.num not in (select distinct table.number from table)
案例2:因为您发布的问题看起来像表中没有数字 -
select list1.num from
(
select number1 num from dual
union
select number2 num from dual
union
select number3 num from dual
union
select number4 num from dual
union
select number5 num from dual
union
select number6 num from dual
union
select number7 num from dual
union
select number8 num from dual
union
select number9 num from dual
union
select number10 num from dual
union
select number11 num from dual
) list1
where list1.num not in (select distinct table.number from table)
代替number1到number11,您必须粘贴您的列表编号..
答案 3 :(得分:1)
这在功能上等同于@Denis的回答,但使用的技术略有不同:
CREATE TYPE nt_number AS TABLE OF NUMBER;
SELECT COLUMN_VALUE
FROM table(nt_number(1,3,8,12,14))
MINUS
SELECT NUMBER_COLUMN
FROM YOUR_TABLE;
将MINUS
更改为INTERSECT
会为您提供两个表中都存在的值。
答案 4 :(得分:0)
我首先误解了你的问题:)
临时表中的数字和加入是最好的选择。