運行環境: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.)
