[英]“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.