- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数テーブルを結合するには?)
複数テーブルを結合するには?
このQ&Aのポイント
- 複数のテーブルを結合する方法について解説します。SQL文を使用してテーブルを結合させることができます。具体的な結合方法として、2つのテーブルを結合させる場合はJOIN句を使用し、3つ以上のテーブルを結合させる場合はJOIN句を連結して使用します。
- 具体的なSQL文として、2つのテーブルを結合させる場合は以下のように記述します。SELECT文にJOIN句を使用し、結合するテーブルを指定します。JOIN句の後には結合条件を指定します。例えば、テーブルAとテーブルBを結合させる場合は、ON句でAテーブルとBテーブルの結合条件を指定します。
- 3つのテーブルを結合させる場合は、2つのテーブルを結合する方法と同じようにJOIN句を使用します。テーブルAとテーブルBを結合させた後に、ON句でテーブルCとの結合条件を指定します。ただし、注意点として、右側外部結合を指定する場合は、一部のデータベースではエラーが発生する可能性があります。エラーが発生する場合は、他の結合方法を試してみてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
10g ですが、問題なく動きました。 もし、動かないようでしたら、Oracleのバグかもしれません。 JOINキーワードを使った構文を、Oracleは取り入れたばかりなので、結構問題が多いようです。 少なくとも、この問題は10gでは解決しているようです。 Oracle方言の下のSELECT文を試してみてください。 select A.*,B.*,C.* from A,B,C WHERE A.XX(+) = B.XX AND B.XX(+) = C.XX; 私は、つい最近natural joinをかけた後のCOUNT(*)のバグを発見して、Oracleに報告したばかりです。
お礼
私の方でも10gの環境で同じSQL文を実行してみました。 結果、問題なく動きました。 9iの方では ORA-00904 "C" 無効な識別子です。 というエラーが表示される辺り、どうやらオラクルのバグのようです。 これだけだと何ですので、少し私が調べた結果を載せて解決済にしたいと思います。 SELECT区を個別に*で取得するとエラーとなりましたが、 SELECT * FROM~ とするか、 SELECT A.XX,A.YY,B.XX,B.YY,C.XX,C.YY FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C ON A.XX = C.XX のように一つずつ指定するとエラーを回避できました。 お蔭様で解決できました。ありがとうございます。