我有一個列表,例如:1,2,5,6,8,12,15PostgreSQL:獲取列表中不存在於另一個列表中的所有數字
我試圖上來使用SQL查詢返回給我一個來自上一個列表的數字列表,不在另一個列表中。
因此,假設我讓所有的ID從表中那些是:1,3,7,8,15
中的結果應該是:2,5,6,12
因爲這些數字並不在第二個列表中,但列在第一個列表中。
我認爲這一個會很容易,但我很難過。谷歌搜索沒有取得任何結果,我只能列出關於列表和左連接的內容。
我有一個列表,例如:1,2,5,6,8,12,15PostgreSQL:獲取列表中不存在於另一個列表中的所有數字
我試圖上來使用SQL查詢返回給我一個來自上一個列表的數字列表,不在另一個列表中。
因此,假設我讓所有的ID從表中那些是:1,3,7,8,15
中的結果應該是:2,5,6,12
因爲這些數字並不在第二個列表中,但列在第一個列表中。
我認爲這一個會很容易,但我很難過。谷歌搜索沒有取得任何結果,我只能列出關於列表和左連接的內容。
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
可以使用NOT IN
語句來得到你需要的東西:
SELECT
my_id
FROM
My_Table
WHERE
my_id NOT IN (SELECT other_ids FROM Some_Other_Table)
我會建議使用內部連接,並檢查空值。
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;
的反連接是一種非常有效的結構:
select a.id
from a
where not exists (
select null
from b
where a.id = b.id
)
這裏是一個相關的問題:http://stackoverflow.com/questions/7125291/postgresql-not-in-versus-except - 表演差編輯-2- – Andreas