- ベストアンサー
SQLの外部結合について教えて下さい
- SQLの外部結合について教えてください。困っています。
- SQL構文の外部結合が分からなくて、HTMLの表示だけでレコードが表示されない問題があります。
- 自分で作成したSQLを紹介しますが、正しい結合の方法が分かりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
上手くいってよかったです!ところで、UNION ALLに関しては自分も良くわからなかったので調べてみたところ、ORDER BYをセットで使うには、サブクエリを使うしかないようです。参考URLをごらんになってもらうといいと思いますが、一応こんな感じでしょうか。 rs1 = stmt1.executeQuery("SELECT * FROM ( SELECT * FROM T_Table AS t INNER JOIN T_TableA AS ta ON t.ID = ta.ID WHERE ta.ID = '" + Nam + "' union all SELECT * FROM T_Table AS tb INNER JOIN T_TableB AS tc ON tb.ID = tc.ID WHERE tc.ID = '" + Nam + "' ) ORDER BY 日付 DESC;"); 実際に試してはいませんが、こんな具合でいけるはずです。実践あるのみですね!ちなみに自分の勉強にもなりました(^ー^* )。
その他の回答 (4)
- Sugichi28
- ベストアンサー率75% (3/4)
すいません・・。ORDER BY の直前に AS ~~で別名つけないとだめかもしれません・・。それと、もしそれでも解決しなければ一度テーブルの仕様を見せていただけるとわかりやすいです。具体的にカラム名と内容を見せてもらえるといいですね。
お礼
色々、苦戦しましたがAS ~~で別名を付ける事で成功しました! 懇切丁寧に回答を頂き感謝致します。 またご質問の投稿のにて見かけられた際には宜しくお願い致します。 助かりました☆ 本当にありがとうございました!!
- Sugichi28
- ベストアンサー率75% (3/4)
LEFT JOINの部分をINNER JOINにかえるだけでOKですよ(^O^)。
お礼
Sugichi28さん ありがとうございます! ご教示頂いた記述で上手くできました☆ すみません1点だけ教えて頂きたいのですが宜しいでしょうか? 外部結合とUNION ALLを組み合わせたのですが「order by 日付 desc」でエラーが出てしまいます。外すと実装されるのですが記述の場所が悪いのでしょうか? この点だけ大変お手数ですがご教示下さいませ。 宜しくお願い致します。 【作成SQL】 rs1 = stmt1.executeQuery("SELECT * FROM T_Table AS t INNER JOIN T_TableA AS ta ON t.ID = ta.ID WHERE ta.ID = '" + Nam + "' ORDER BY 日付 DESC union all SELECT * FROM T_Table AS tb INNER JOIN T_TableB AS tc ON tb.ID = tc.ID WHERE tc.ID = '" + Nam + "'ORDER BY 日付 DESC);
補足
Sugichi28さん ほんとうにありがとございます! 火曜日に試してみたいと思います。☆ SQLの勉強が足りませんでした。。。 もう少しがんばりたいと思います!
- Sugichi28
- ベストアンサー率75% (3/4)
すいません。前の内容に一箇所間違いがあったので訂正します。 WHERE taID=... → WHERE ta.ID=... ピリオドが抜けてました・・・。それと、earlgyreprinceさんが自分で書かれた構文は外部結合ではなく内部結合(INNER JOIN)ですね。
補足
Sugichi28さん ありがとうございます!! そしてごめんなさい。。。 内部結合の間違いでした。 ご教示下さい。
- Sugichi28
- ベストアンサー率75% (3/4)
もしもT_TableとT_TableAで外部結合する場合、どちらのテーブルのレコードをすべて表示するかによって変わりますが、簡単な例としてはこんな感じでしょうか。 "SELECT * FROM T_Table AS t LEFT JOIN T_TableA AS ta ON t.ID = ta.ID WHERE taID = " + Nam + "ORDER BY 日付 DESC;" ちなみに私は、MySQLしか扱ったことがないので微妙に違うかもしれませんが、おそらくこんな感じでいいと思います。この場合、T_Tableのレコードはすべて表示されると思われます。 ちなみに、エラーが出たときでもそうでなくても、とりあえずSQLに直接入力してテストしたほうが効率がいいと思います。お試しくださいませ。
補足
Sugichi28さん ありがとうございます! 'ORDER'付近が不適切です・・・の様なメッセージが出てしまいました。 もう1度考えてみます☆