3

我正在使用 Postgres 9.1,并希望在没有数据的情况下得到一些空白的结果。我的查询如下所示:

SELECT institution_id FROM ... WHERE institution_id IN (1, 3, 4, 5, 7, 9)

... 对这个问题并不重要,重要的是它返回一个带有数组 (1, 3, 4, 5, 7, 9) 中的机构 ID 的结果,并且它包括那些没有数据的机构。这是当前输出的示例

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) 创建了我不感兴趣的机构 ID,它要求我先验地知道最大机构 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} 都无济于事。

有任何想法吗?

谢谢

4

1 回答 1

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
于 2013-03-26T17:24:38.620 回答