我正在使用 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} 都无济于事。
有任何想法吗?
谢谢