• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数テーブルの結合及び評価させることは可能???)

複数テーブルの結合及び評価させることは可能???

このQ&Aのポイント
  • SQLで3つのテーブルを結合させた上に、データを評価させることは出来ますでしょうか?
  • GAKUREKIテーブルのG_JISSEKISHUKEIの数とJISSEKIテーブルのS_CODEとS_SHOZOKUのデータをgroup byしてcountした結果を付きあわせたいと思っています。
  • しかし、GAKUREKIテーブルのS_SHOZOKUとJISSEKIテーブルのS_SHOZOKUが結びつけることができません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

3個のテーブルを結合して不具合があるなら、2個ずつ結合してunionして集計すると 大抵、大丈夫なはずです。 例)タブンこれでいいと思うけど(未検証です) select CODE,SHOZOKU,sum(JISSEKISHUKEI),count(NAME) from ( select sha.S_CODE CODE,sha.S_SHOZOKU SHOZOKU,gak.G_JISSEKISHUKEI JISSEKISHUKEI,Null NAME from SHAIN sha,GAKUREKI gak where sha.S_CODE = gak.S_CODE union all select sha.S_CODE CODE,sha.S_SHOZOKU SHOZOKU,0 JISSEKISHUKEI,jis.J_NAME NAME from SHAIN sha,JISSEKI jis where sha.S_CODE = jis.S_CODE ) group by CODE,SHOZOKU order by sha.S_CODE,sha.S_SHOZOKU ※count(NAME)で、NAMEがNULLのデータも計算されてしまうDBなら sum(case when NAME is null then 0 else 1 end) とすれば大丈夫。 ※最新バージョンなら大抵のDBは動くと思うけど。 でも、質問にある場合なら、 SHAINテーブルとGAKUREKIテーブルは1:1のようなので、 結合した結果とJISSEKIテーブルを結合してcountとって問題ないのでは? (SHAINテーブルとGAKUREKIテーブルが1:1でなければダメです。) 例) select sha.S_CODE,sha.S_SHOZOKU,gak.G_JISSEKISHUKEI,count(*) from SHAIN sha,GAKUREKI gak,JISSEKI jis where sha.S_CODE = gak.S_CODE and sha.S_CODE = jis.S_CODE group by sha.S_CODE,sha.S_SHOZOKU,gak.G_JISSEKISHUKEI order by sha.S_CODE,sha.S_SHOZOKU >最新版のSQLserver、MySQL、DB2、HiRDBを使ってみています。構文も変わりますか? 通常、関数を使っているとまず動きません! ただ、今回の場合は、union all や case くらいなので動くんじゃないかな。

mr-r00
質問者

お礼

ありがとうございます! 大変参考になる意見ありがとうございました。 おかげでもくてきをたっせいすることができました!

関連するQ&A