執行多表連接查詢時拋出 ORA-00918: column ambiguously defined。SQL 涉及 Articm、Develop_Articm、Stylem、Artic_Regcode 四張表,選項列表包含大量欄位,部分欄位在多表中同名(如 Artic_No、Fact_No、Style_No 等)。
SELECT 列表或 WHERE 條件中引用的列名在多張表中同時存在,且未加表別名限定。Oracle 無法判斷應取哪張表的列,拋出「列定義模糊」錯誤。
Articm.Artic_No)。Fact_No、Artic_No、Style_No、Brand 等業務鍵值。原查詢片段:
SELECT Articm.Fact_No, Articm.Artic_No, Develop_Articm.Artic_No Develop_Articm_Artic_No,
Articm.Style_No, ...
FROM Articm, Develop_Articm, Stylem, Artic_Regcode
WHERE (Articm.Fact_No = Stylem.Fact_No(+))
AND (Articm.Style_No = Stylem.Style_No(+))
...
若 Stylem 也有 Artic_No,而 SELECT 中寫 Artic_No 不加別名,即報錯。需改為:
SELECT Articm.Fact_No, Articm.Artic_No, Develop_Articm.Artic_No AS Develop_Articm_Artic_No,
Articm.Style_No, ...
所有欄位**統一加上表別名**,哪怕當前不衝突,也利於維護。
t.col)。INNER JOIN ... ON),條件更清晰,減少漏加別名。*,顯式列出欄位並加別名。ORA-00918 純屬 SQL 編寫規範問題。給每張表起別名,所有欄位引用必須帶別名,即可徹底避免此錯誤。