質問: sql 複数条件を設定 postgresqlを使用しております。 それぞれ、table1とtable1があり、 table1 a-1 a-2 b-1 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd 2 ggg bbb ccc 3 bbb mmm ddd 4 ggg mmm ccc : table2 a-1 a-2 c-1 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa eee 2 ggg mmm qqq : 質問1. table1.a-1=table2.a-1 and table1.a-2=table2.a-2 を条件にして結合 したい場合、どのように結合すればよいのか。 期待結果 a-1 a-2 b-1 c-1 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 1 bbb aaa ddd eee 2 ggg bbb ccc ※ 3 bbb mmm ddd ※ 4 ggg aaa ccc qqq ※は空白でもnullでもよい 質問2. 上記が可能な場合にさらに質問です。 table1およびtable2が、select,whereによって抽出されたものとした場合、 1つのsql文で質問1と同様の出力にするにはどのように結合すればよいのか。(はたまた無謀なのか) 知識不足のため悩んでいる状況なので、 どなた様か知識がある方にご教授願いたく思います。
回答: どこが具体的に分からないのでしょうか? >期待結果 a-1 a-2 b-1 c-1 > ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ > 1 bbb aaa ddd eee > 2 ggg bbb ccc ※ > 3 bbb mmm ddd ※ > 4 ggg aaa ccc qqq >※は空白でもnullでもよい 4番目の値を間違っていませんか? 4 ggg mmm ccc qqq ですよね? 1~4の通番も値として持つのですか? 列名に「-」を使うのですか? その場合、減算と区別するために、「"」で囲む必要がありますよ? postgresqlのバージョンは何ですか? あまりに古いと、具体例を提示しても、wanton_dogの環境では実行できないかも知れません。 以下の例は、table1に通番の列(seqno)があるものとします。 -- ex1 -- 簡単なleft outer join(結合のための列が2個) select seqno, t1."a-1",t1."a-2","b-1","c-1" from table1 as t1 left join table2 as t2 on t1."a-1"=t2."a-1" and t1."a-2"=t2."a-2" ; -- ex2 -- ex1のsqlを、nullの場合、値を置き換える -- nullを判別する関数は複数あったり、rdbmsにより違う。 -- coalesce関数は、主要なrdbmsで実装されている select seqno, t1."a-1",t1."a-2", coalesce("b-1",'blank') as "b-1", coalesce("c-1",'blank') as "c-1" from table1 as t1 left join table2 as t2 on t1."a-1"=t2."a-1" and t1."a-2"=t2."a-2" ; -- ex3 -- ex1のsqlを、インラインビューから得る形に変える select seqno, t1."a-1",t1."a-2","b-1","c-1" from (select * from table1) as t1 left join (select * from table2) as t2 on t1."a-1"=t2."a-1" and t1."a-2"=t2."a-2" ; -- ex4 -- ex1のsqlを、行値構成子(行値式)を使用する形に変更する。 select seqno, t1."a-1",t1."a-2","b-1","c-1" from table1 as t1 left join table2 as t2 on (t1."a-1",t1."a-2")=(t2."a-1",t2."a-2") ;