
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で質問しましょう!
似たような質問が見つかりました
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
ROWNUMでUPDATEをしたいのです...
-
クエリー : テーブル一覧&定...
-
SQLでSUMなどの関数でデータが...
-
数値をNUMBER型にするかCHAR型...
-
Viewのカラムの長さが不明?
-
sqlplusで表示が変なので、出力...
-
SQL(oracle)でご助言いただきた...
-
DBからタブ区切りのCSVデータを...
-
親・子・孫のリレーション
-
oracleのエラー(ORA-00932)の...
-
件数とデータを同時に取得する...
-
ACCESSとoracleのODBC接続
-
マテリアライズド・ビューの変更
-
SQLで違うテーブルの値を比較し...
-
descでdefault値やキーなどを表...
-
ワークテーブルって何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL、2つのテーブルで条件一致...
-
update文で改行を入れる
-
SQL*LoaderでCSVから指定した列...
-
sqlplusで表示が変なので、出力...
-
テーブル名をカラムとして取得...
-
SQL 複数テーブルのupdate
-
ROWNUMでUPDATEをしたいのです...
-
カラム位置変更
-
SQLでSUMなどの関数でデータが...
-
SQL(oracle)でご助言いただきた...
-
OracleのSQLで同テーブルのカラ...
-
SQLで違うテーブルの値を比較し...
-
特定のカラムが更新されたとき...
-
LONG型の先頭250バイトを Varch...
-
DBからタブ区切りのCSVデータを...
-
Viewのカラムの長さが不明?
-
distinct をexistsに変換する
-
oracle 複数列を1列にまとめる
-
件数とデータを同時に取得する...
-
数値をNUMBER型にするかCHAR型...
おすすめ情報