ORACLE中,報ORA-00918:未明確定義列的錯誤


運行環境:Oracle10g sqlplus環境下。 

在查詢語句中,經常會出現一個錯誤:ORA-00918:未明確定義列的錯誤。

當前遇到有兩種情況。原因為:當查詢語句中,查詢的表(數據集,如a,b2張表格)中有相同的字段名,查詢字段無法確認是該查哪個字段時,就會報未明確定義列的錯誤。

第一種情況: 

1.單表時: 

比如sign表中存在三個字段:

sign_id,sign_type,sign_status  SELECT SIGN_ID FROM (SELECT SIGN_ID,SIGN_TYPE,FC.* FROM SIGN FC) T

這個SQL語句就會報錯,因為在T中SIGN_ID有兩個字段(原因:sql語句中FC.*表示將sign表中所有字段再進行一次查詢,與sql中原有的sign_id重復),導致DBMS無法確定要查詢的哪個列 

修改之后:

SELECT SIGN_STATUS FROM (SELECT SIGN_ID,SIGN_TYPE,FC.* FROM FCONSIGN FC) T 

這樣就不會報錯了,T中SIGN_STATUS只有一個,這樣就不會報錯了。 

總而言之:在嵌套查詢中,外查詢的字段在子查詢中只能出現一個,否則則無法確定是要查哪個字段。就會報 未明確定義列的錯誤。 

 第二種情況:

2.多表聯合查詢 

比如表A,B中都有a字段。 

select a from A,B

這樣就要報錯。因為也是無法確定查 哪一列。需要明確定義A.a或者B.a (如果在from語句后面為表取了別名,

比如 select a.a from A a join B b on (a.a = b.b)的時候,

則 select語句中那個被多張表都擁有的相同字段名也需要用別名標識 如:a.a.)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM