我有一个列表,例如:1,2,5,6,8,12,15
我试图想出一个SQL查询,它返回一个数字列表,从上一个列表中,不在另一个列表中。
所以,假设我从表中得到所有内容,那些是:1,3,7,8,15
结果集应为:2,5,6,12
因为那些是第二个列表中不存在的数字,但存在于第一个列表中。
我认为这个很容易,但我很难过。谷歌搜索它没有产生我可以使用的结果,只列出关于列表和左连接的事情。
答案 0 :(得分:2)
with a (id) as (values
(1),(2),(5),(6),(8),(12),(15)
), b (id) as (values
(1),(3),(7),(8),(15)
)
select id from a
except all
select id from b
;
id
----
6
5
12
2
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-EXCEPT
答案 1 :(得分:1)
您可以使用NOT IN
语句来获取所需内容:
SELECT
my_id
FROM
My_Table
WHERE
my_id NOT IN (SELECT other_ids FROM Some_Other_Table)
答案 2 :(得分:1)
我建议使用内连接并检查空值。
with a (id) as (values
(1),(2),(5),(6),(8),(12),(15)
), b (id) as (values
(1),(3),(7),(8),(15)
)
select a.id from a
left join b on a.id=b.id
where b.id is null;
答案 3 :(得分:0)
反连接是一种非常有效的结构:
select a.id
from a
where not exists (
select null
from b
where a.id = b.id
)