Python 如何强制Postgresql对任何SQL语句丢失的数据返回None?
我有一张桌子,比如说:Python 如何强制Postgresql对任何SQL语句丢失的数据返回None?,python,sql,postgresql,Python,Sql,Postgresql,我有一张桌子,比如说: id | value 1 | 'a' 2 | 'b' 其中可能缺少某个ID的值。如果我使用迭代解决方案,例如: for item in my_array: data = cursor.execute("""SELECT id from table WHERE value = 'a'""") 如果数据库中没有“a”,我就得不到一个,并且可以处理它,所以对于每个项目,我至少没有一个。 但是如果我想同时做所有的事情,比如: “”“从value=ANY的表中选择
id | value
1 | 'a'
2 | 'b'
其中可能缺少某个ID的值。如果我使用迭代解决方案,例如:
for item in my_array:
data = cursor.execute("""SELECT id from table WHERE value = 'a'""")
如果数据库中没有“a”,我就得不到一个,并且可以处理它,所以对于每个项目,我至少没有一个。
但是如果我想同时做所有的事情,比如:
“”“从value=ANY的表中选择id(数组['a','b','c','d'])”
因此,我需要4个响应(包括缺少数据的无响应),虽然它只对SQL中的当前数据给出响应,但您需要生成数据并使用
左连接。在Postgres中,您可以执行以下操作:
select v.value, t.id
from (values ('a'), ('b'), ('c'), ('d')) v(value) left join
table t
on t.value = v.value;
您需要将表与其自身连接起来:
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
在左连接之前,需要在不同id上进行交叉连接。
orig_id |filtered_id |
--------|------------|
...
22 | |
27 | |
28 | |
29 |29 |
30 |30 |