首頁 > 資料庫 > mysql教程 > 如何解決 SELECT * 查詢中的「ORA-00918:列定義不明確」?

如何解決 SELECT * 查詢中的「ORA-00918:列定義不明確」?

DDD
發布: 2025-01-13 21:15:47
原創
477 人瀏覽過

How to Resolve

*對 SELECT 查詢中的「ORA-00918:列定義不明確」進行故障排除**

對包含同名列的多個連接表執行 SELECT * 查詢時,通常會出現錯誤「ORA-00918:列定義不明確」。 當多個資料表共用列名時,Oracle 資料庫引擎無法確定您要檢索哪一列。

說明性範例與解決方案

考慮這個 SQL 查詢:

<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>
登入後複製

此查詢會產生錯誤,因為多個資料表(coachespeopleusers)包含名為「id」的欄位。

要修正此問題,請避免使用 SELECT *。相反,明確指定您需要的列:

方法一:直接選取欄位

此方法直接透過完全限定名稱(table.column)選擇所需的欄位:

<code class="language-sql">SELECT coaches.id,
       people.name,
       users.username,
       coaches.title
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:使用列別名

這種方法為具有重複名稱的欄位指派唯一的別名。 這使得所選列明確:

<code class="language-sql">SELECT coaches.id AS coach_id,
       people.name AS person_name,
       users.username AS user_username,
       coaches.title AS coach_title
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 *

以上是如何解決 SELECT * 查詢中的「ORA-00918:列定義不明確」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板