2016-12-17 16 views
1

我有一個表,讓我們說:如何強制Postgresql使用ANY SQL語句返回缺失數據?

id | value 
1 | 'a' 
2 | 'b' 

凡有些ID的值可能會丟失。如果我使用迭代解決方案,例如:

for item in my_array: 
    data = cursor.execute("""SELECT id from table WHERE value = 'a'""") 

如果沒有「一」在DB我得到無,可以處理它,所以每個項目我至少沒有。如果我想一次做所有事情,如:

「」「SELECT WHERE value = ANY(array ['a','b','c','d'])」 「」

所以我需要4個響應(包括無缺失數據),而只給了我回應了當前數據

回答

2

在SQL中,你需要生成的數據,並使用left join。在Postgres裏,你可以這樣做:

select v.value, t.id 
from (values ('a'), ('b'), ('c'), ('d')) v(value) left join 
    table t 
    on t.value = v.value; 
+0

十字對不同的ID加入之前需要一個'左連接「。 –

1

你需要加入表本身:

select t.id as orig_id, filtered.id as filtered_id 
from <table> t 
left join(
    select * from <table> where value = ANY(ARRAY[29, 30, 31, 32]) 
) filtered 
on t.id = filtered.id 
order by t.id 

結果:

orig_id |filtered_id | 
--------|------------| 
... 
22  |   | 
27  |   | 
28  |   | 
29  |29   | 
30  |30   |