我正在我的PostgreSQL数据库上运行一个简单的SELECT
语句,如下所示:
SELECT * FROM my_table WHERE primary_key IN (a, b, c);
如果my_table
只有对应于主键的条目a
和c
,则查询将只返回两行 - 一行用于a
及其所有数据,另一行用于c
及其所有数据。
我希望查询在表中没有主键条目时返回空行(或NULL
/nil
值)。 所以我希望上述SELECT
查询的输出是 [a_data
,nil
,b_data
] 而不是 [a_data
,b_data
]。有没有办法做到这一点?
更一般地说,如果我有SELECT * FROM my_table WHERE primary_key IN (x_1, x_2, ..., x_n)
,我希望返回n
行,其中x_data
对于数据库中不存在的每个x
NULL
/nil
。
使用派生表和左连接。 在Postgres中,这看起来像:
select t.primary_key, primary_key
from (values (a), (b), (c)) v(primary_key) left join
my_table t
using (primary_key);