我正在使用Postgres 9.1并希望在没有数据的情况下得到一些空白的结果。我的查询如下所示:
SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)
......对于这个问题并不重要,重要的是它返回数组中的institution_ids(1,3,4,5,7,9)的结果,并且它包括那些没有数据的机构。以下是当前输出的示例
days treatments institution_id
266 6996 4
265 5310 1
267 3361 5
260 2809 3
264 5249 7
我想要的输出示例是
days treatments institution_id
266 6996 4
265 5310 1
267 3361 5
260 2809 3
264 5249 7
9
我知道我可以通过使用以下查询来实现这一目标
SELECT * FROM (SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)) RIGHT JOIN generate_series(1,9) ON generate_series = institution_id WHERE generate_series IN (1, 3, 4, 5, 7, 9)
然而,这是额外的工作,因为generate_series(1,9)创建了我不感兴趣的institution_ids,它要求我知道最大的institution_id先验,并且它引入了一个不必要的WHERE子句。理想情况下,我想要一个像下面这样的查询
SELECT * FROM (SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)) RIGHT JOIN (1, 3, 4, 5, 7, 9) ON generate_series = institution_id
其中(1,3,4,5,7,9)只是Postgres用于JOIN命令的数组。我也已经尝试过[1,3,4,5,7,9]和{1,3,4,5,7,9}都无济于事。
有什么想法吗?
由于
答案 0 :(得分:4)
select i.days, i.treatments, s.id institution_id
from
institution i
right join (
values (1), (3), (4), (5), (7), (9)
) s (id) on i.institution_id = s.id
或者
select i.days, i.treatments, s.id institution_id
from
institution i
right join
unnest(array[1, 3, 4, 5, 7, 9]) s (id) on i.institution_id = s.id