ホームページ > データベース > mysql チュートリアル > Oracle の ORA-00918: SELECT * クエリにおける曖昧な列定義エラーを解決する方法は?

Oracle の ORA-00918: SELECT * クエリにおける曖昧な列定義エラーを解決する方法は?

Mary-Kate Olsen
リリース: 2025-01-13 21:26:47
オリジナル
157 人が閲覧しました

How to Resolve Oracle's ORA-00918: Ambiguous Column Definition Error in SELECT * Queries?

*Oracle ORA-00918: あいまいな列定義 – SELECT クエリの問題**

Oracle で複数の結合テーブルに対して SELECT * クエリを実行すると、恐ろしい ORA-00918 エラー「曖昧な列定義」が発生する可能性があります。これは、クエリに異なるテーブルの同じ名前の列が含まれている場合に発生します。 Oracle は、どの列を取得しようとしているのかを判断できません。

このエラーが頻繁に発生するクエリの例を次に示します。

<code class="language-sql">SELECT *
FROM
  (SELECT DISTINCT(coaches.id),
    people.*,
    users.*,
    coaches.*
  FROM "COACHES"
  INNER JOIN people ON people.id = coaches.person_id
  INNER JOIN users ON coaches.person_id = users.person_id
  LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25</code>
ログイン後にコピー

問題の根源

SELECT * はすべての列を取得しようとしますが、id が複数のテーブル (coachespeopleusers) に存在するため、Oracle はどの id 列を選択するか不明のままです。

解決策: 正確なカラム仕様

ORA-00918 を修正するには、SELECT * を避けてください。 代わりに、必要な列を明示的にリストします。 これを実現するには主に 2 つの方法があります:

1.列の直接選択

完全修飾名 (table.column) を使用して各列を指定します。

<code class="language-sql">SELECT coaches.id,
       people.name,
       users.username,
       coaches.team
FROM
  (SELECT DISTINCT(coaches.id),
    people.*,
    users.*,
    coaches.*
  FROM "COACHES"
  INNER JOIN people ON people.id = coaches.person_id
  INNER JOIN users ON coaches.person_id = users.person_id
  LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25</code>
ログイン後にコピー

2.列エイリアスの利用

AS キーワードを使用して、同じ名前の列に一意の別名を割り当てます。

<code class="language-sql">SELECT coaches.id AS coaches_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.team AS coaches_team
FROM
  (SELECT DISTINCT(coaches.id),
    people.*,
    users.*,
    coaches.*
  FROM "COACHES"
  INNER JOIN people ON people.id = coaches.person_id
  INNER JOIN users ON coaches.person_id = users.person_id
  LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25</code>
ログイン後にコピー

いずれかの方法を採用すると、Oracle に明確な指示が提供され、ORA-00918 エラーが解決され、クエリが正常に実行されるようになります。 列名例を実際の列名に置き換えてください。

以上がOracle の ORA-00918: SELECT * クエリにおける曖昧な列定義エラーを解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート