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}の両方を試しましたが無駄になりました。
何か案は?
ありがとう