以下のように表示されます。
(日本語)
ORA-00918: 列の定義が未確定です。
(英語)
ORA-00918: column ambiguously defined
発生パターン
このエラーは以下のような場合に発生します。
- select句に指定したカラム名が一意に認識できない。
- where句で指定したカラム名が一意に認識できない。
(複数のテーブルに同じカラム名が存在する場合、カラム名だけ指定するとどちらのカラムか判断できないためエラーとなります。)
- エラー例1
- SQL> SELECT id FROM tbl01 INNER JOIN tbl02 2 ON tbl01.id = tbl02.id 3 / SELECT id FROM tbl01 INNER JOIN tbl02 * 行1でエラーが発生しました。: ORA-00918: 列の定義が未確定です。
SELECT句に指定しているidが tbl01のidか、tbl02のidか分からないためエラーとなっています。「tbl01.id」のようにすればエラーは解消します。
- エラー例2
- SQL> SELECT * FROM tbl01 INNER JOIN tbl02 2 ON tbl01.id = tbl02.id 3 WHERE id = 'XX' 4 / WHERE id = 'XX' * 行3でエラーが発生しました。: ORA-00918: 列の定義が未確定です。
この場合、where句に指定したidが tbl01のidかtbl02のidか判断が付きません。
3行目を「WHERE tbl01.id = 'XX'」のようにすればエラーは解消します。
対処法
- エラー対象のカラム名にテーブル名も指定する。
(例)
× id
〇 tbl01.id