OS:WINDOWSXP SP2
ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0
A, B, Cというテーブルがあるとします。
それぞれのテーブルには XXカラムと YYカラムがあるとします。
2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。
SELECT A.*,B.* FROM A JOIN B
ON A.XX = B.XX
3つのテーブルを結合するには、以下のSQL文を記述しています。
SELECT A.*,B.*,C.* FROM A JOIN B
ON A.XX = B.XX
JOIN C
ON A.XX = C.XX
但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、
ORA-00904 "C" 無効な識別子です。
というエラーメッセージが表示されます。
SELECT A.*,B.*,C.* FROM A JOIN B
ON A.XX = B.XX
RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります)
ON A.XX = C.XX
何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。
複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?
No.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
のように一つずつ指定するとエラーを回避できました。
お蔭様で解決できました。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
PLSQLのNumber型の初期化
-
複数テーブルを結合するには?
-
ROWNUMでUPDATEをしたいのです...
-
DELETE文とロックについて
-
SQL(oracle)でご助言いただきた...
-
UPDATE文
-
OracleのSQLで同テーブルのカラ...
-
SQL、2つのテーブルで条件一致...
-
SQL文のCOUNTの戻り値は?
-
半角英数文字の抽出がしたい。
-
SQL 複数テーブルのupdate
-
ワークテーブルって何?
-
SQLで違うテーブルの値を比較し...
-
update文で改行を入れる
-
SQL 不要な文字列を削除したい
-
件数とデータを同時に取得する...
-
Viewのカラムの長さが不明?
-
UPDATE文で、書き換えるデータ...
-
distinct をexistsに変換する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
ROWNUMでUPDATEをしたいのです...
-
SQL*LoaderでCSVから指定した列...
-
SQLでSUMなどの関数でデータが...
-
sqlplusで表示が変なので、出力...
-
カラム位置変更
-
件数とデータを同時に取得する...
-
SQL 複数テーブルのupdate
-
特定のカラムが更新されたとき...
-
OracleのSQLで同テーブルのカラ...
-
数値をNUMBER型にするかCHAR型...
-
UPDATE文
-
LONG型の先頭250バイトを Varch...
-
SQLで違うテーブルの値を比較し...
-
DELETE文とロックについて
-
PLSQLのNumber型の初期化
-
SQL(oracle)でご助言いただきた...
-
半角英数文字の抽出がしたい。
おすすめ情報