我有这样的查询:
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:列模糊定义
这是最好的方法吗?
答案 0 :(得分:4)
最好的方法是使用表别名和列别名,如下所示
一列:
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
答案 1 :(得分:2)
最好的方法是明确,例如:
SELECT ref1.frubberducks as frubberducks,
ref3.frubberducks as frubberducks_1 ...
select *
意味着你想要一切,而不是过分担心它在结果集中的位置。如果你做了关心,你就会明确地列出这些列。在极少数情况下,您实际上应该使用select *
。
答案 2 :(得分:1)
这是因为如果您指定要返回的列,则必须明确指定它们。
所以看起来应该是
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