2

次のようなクエリがあります。

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 つのレコードが得られます。

これらの列のうち 2 つは同じ名前ですが、後者の列には直観的に拡張子 _1 が付けられているため、その名前の最初の列には名前がfrubberducksあり、2 番目の列には名前がありfrubberducks_1ます。これは素晴らしいことです。これら2つの列のみを提供するクエリが必要なので、試しました:

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: 列の定義があいまいです

これを行う最良の方法は何ですか?

4

3 に答える 3

4

The best way to do that is using table aliases and column aliases as below

for one column:

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

for two columns with the same name:

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

for two columns with the same name and with column aliases:

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
于 2013-09-09T06:56:18.020 に答える
2

最善の方法は、次のように明示することです。

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

select *すべてが必要であり、結果セットのどこにあるかをあまり気にしないことを意味します。気にしていれば、列を明示的にリストすることになります。とにかく実際に使用する必要がある貴重なケースはほとんどありませselect *ん。

于 2013-09-09T06:57:48.377 に答える
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
于 2013-09-09T07:00:04.387 に答える