0

我不是 sql 专家。我试图在我的 oracle sqlplus 提示符下运行以下查询

选择 0 作为 initVal,
loadTable.amount 从
accountTable JOIN loadTable ON num=accNum ,
loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq

并出现以下错误

列定义不明确,它指向 select 子句中的 loadTable.amount。

一点点我能够理解有一个笛卡尔积,accountsTable JOIN loadTable ON num=accNum 之后loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq它无法理解从哪个表中选择loadTable.amount,因为两者的结果都有这一列。有什么办法可以在不指定这两个中间表之间的另一个连接的情况下摆脱这个问题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;

您的查询有loadtable两次,我认为您不打算这样做。而且,最后一个条件是重言式,因为值来自同一个表。此外,您应该使用缩写形式的表别名——它使查询更易于编写和阅读。我认为这更接近你想要做的事情:

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;

这些连接条件对我来说看起来毫无意义,特别是因为查询amount只从一个表中提取,所以第二个表似乎甚至没有被使用。

于 2014-06-08T18:37:36.277 回答