3

Postgres 9.1を使用していて、データがないところにいくつかの空白がある結果を取得したいと思います。私のクエリは次のようになります。

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

...はこの質問にとって重要ではありません。配列(1、3、4、5、7、9)にinstitution_idsを含む結果を返し、データのない機関を含めることが重要です。これが現在の出力の例です

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_idを作成するため、これは余分な作業です。最大の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}の両方を試しましたが無駄になりました。

何か案は?

ありがとう

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 に答える