簡體   English   中英

“列定義不明確”錯誤

[英]“column ambigiously defined” error

我有這樣的查詢:

SELECT *
  FROM table1 ref1,
       table1 ref2,
       table2 ref3,
       table2 ref4,
       table3
 WHERE ref3.a = ref1.b , 
       ref4.a = ref2.b , 
       ref3.c = f, 
       ref4.c = d

並且效果很好,它為我提供了我想要的所有列的1條記錄。

這些列中的兩個具有相同的名稱,但后一個直觀地以擴展名_1命名,因此具有該名稱的第一列具有名稱frubberducks ,第二列具有名稱frubberducks_1 ,這很好。 我需要一個只給我這兩列的查詢,所以我嘗試了:

SELECT frubberducks
  FROM table1 ref1,
       table1 ref2,
       table2 ref3,
       table2 ref4,
       table3
 WHERE ref3.a = ref1.b , 
       ref4.a = ref2.b ,
       ref3.c = f , 
       ref4.c = d

我收到錯誤:

ORA-00918:列模糊定義

這是最好的方法嗎?

最好的方法是使用表別名和列別名,如下所示

一列:

SELECT ref1.frubberducks
FROM table1 ref1,table1 ref2,table2 ref3,table2 ref4,table3
WHERE ref3.a = ref1.b and ref4.a = ref2.b and ref3.c=f and ref4.c=d

對於具有相同名稱的兩列:

SELECT ref1.frubberducks,
       ref2.frubberducks
FROM table1 ref1,table1 ref2,table2 ref3,table2 ref4,table3
WHERE ref3.a = ref1.b and ref4.a = ref2.b and ref3.c=f and ref4.c=d

對於具有相同名稱和別名的兩列:

SELECT ref1.frubberducks ref1frubberducks,
       ref2.frubberducks ref2frubberducks
FROM table1 ref1,table1 ref2,table2 ref3,table2 ref4,table3
WHERE ref3.a = ref1.b and ref4.a = ref2.b and ref3.c=f and ref4.c=d

最好的方法是明確,例如:

SELECT ref1.frubberducks as frubberducks,
       ref3.frubberducks as frubberducks_1 ...

select *意味着你想要一切,而不是過分擔心它在結果集中的位置。 如果您確實關心,您將明確列出列。 在極少數情況下你應該實際使用select *

這是因為如果您指定要返回的列,則必須明確指定它們。

所以應該看起來像

SELECT ref1.frubberducks, ref2.frubberducks as frubberducks_1
FROM table1 ref1,table1 ref2,table2 ref3,table2 ref4,table3
WHERE ref3.a = ref1.b , ref4.a = ref2.b , ref3.c=f , ref4.c=d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM