PostgreSQL:获取列表中不存在于另一个列表中的所有数字

时间:2015-12-29 18:41:17

标签: sql list postgresql

我有一个列表,例如:1,2,5,6,8,12,15

我试图想出一个SQL查询,它返回一个数字列表,从上一个列表中,不在另一个列表中。

所以,假设我从表中得到所有内容,那些是:1,3,7,8,15

结果集应为:2,5,6,12

因为那些是第二个列表中不存在的数字,但存在于第一个列表中。

我认为这个很容易,但我很难过。谷歌搜索它没有产生我可以使用的结果,只列出关于列表和左连接的事情。

4 个答案:

答案 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
)