0

私はSQLの専門家ではありません。Oracle sqlplusプロンプトで次のクエリを実行しようとしていました

0 AS initVal を選択し、
loadTable.amount から
accountsTable JOIN loadTable ON num=accNum ,
loadTable JOIN ローンテーブル ON loadTable.numSeq=loanTable.numSeq

次のエラーが発生します

select 句で loadTable.amount を指している列があいまいに定義されています。

accountsTable JOIN loadTable ON num=accNum とのデカルト積があることを少し理解できます。その後loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq、どちらのテーブルから選択するかを理解できませんloadTable.amount。両方の結果にこの列があるためです。上のこれら 2 つの中間テーブル間に別の結合を指定せずに、この問題を解決する方法はありますloadTable.amountか?

4

1 に答える 1

2

これはあなたのクエリです:

select 0 AS initVal, loadTable.amount
from accountsTable JOIN
     loadTable
     ON num=accNum ,
     loadTable JOIN
     loanTable
     ON loadTable.numSeq=loanTable.numSeq;

あなたのクエリにはloadtable2回ありますが、これはあなたが意図しているとは思いません。そして、値が同じテーブルから取得されているため、最後の条件はトートロジーです。また、省略形のテーブル エイリアスを使用する必要があります。これにより、クエリの記述と読み取りが容易になります。これはあなたがやろうとしていることにより近いと思います:

select 0 AS initVal, lt.amount
from accountsTable act JOIN
     loadTable lt
     ON act.num = lt.accNum JOIN
     loanTable lot
     ON lt.numSeq = lot.numSeq;

原則として、fromステートメントではコンマを使用しないでください。テーブルは常に適切な で接続してjoinください。

編集:

クエリが「論理的に」正しいと思われる場合は、テーブル エイリアスを入力し、結合について具体的に説明する必要があります。

select 0 AS initVal, lot1.amount
from accountsTable act JOIN
     loadTable lot1
     ON act.num = lot1.accNum CROSS JOIN
     loadTable lot2 JOIN
     loanTable lnt
     ON lot1.numSeq = lot2.numSeq;

これらの結合条件は、特にクエリが 1 つのテーブルのみからプルするamountため、2 番目のテーブルが使用されていないように見えるため、私には無意味に見えます。

于 2014-06-08T18:37:36.277 に答える