2015-12-29 25 views
1

我有一個列表,例如:1,2,5,6,8,12,15PostgreSQL:獲取列表中不存在於另一個列表中的所有數字

我試圖上來使用SQL查詢返回給我一個來自上一個列表的數字列表,不在另一個列表中。

因此,假設我讓所有的ID從表中那些是:1,3,7,8,15

中的結果應該是:2,5,6,12

因爲這些數字並不在第二個列表中,但列在第一個列表中。

我認爲這一個會很容易,但我很難過。谷歌搜索沒有取得任何結果,我只能列出關於列表和左連接的內容。

+0

這裏是一個相關的問題:http://stackoverflow.com/questions/7125291/postgresql-not-in-versus-except - 表演差編輯-2- – Andreas

回答

1

可以使用NOT IN語句來得到你需要的東西:

SELECT 
    my_id 
FROM 
    My_Table 
WHERE 
    my_id NOT IN (SELECT other_ids FROM Some_Other_Table) 
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; 
0

的反連接是一種非常有效的結構:

select a.id 
from a 
where not exists (
    select null 
    from b 
    where a.id = b.id 
) 
相關問題