我不是sql专家。我试图在我的oracle sqlplus提示符上运行以下查询
select 0 AS initVal, loadTable.amount from accountsTable JOIN loadTable ON num=accNum , loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq
并收到以下错误
column ambiguously defined, which is pointing to loadTable.amount in select clause.
我能够理解有一个accountsTable JOIN loadTable ON num=accNum
和loadTable JOIN loanTable ON loadTable.numSeq=loanTable.numSeq
的笛卡尔积,之后无法理解从哪个表中选择loadTable.amount
,因为两者都有这个专栏。
有没有办法在loadTable.amount
上没有指定这两个中间表之间的另一个连接的情况下摆脱这个问题?
答案 0 :(得分: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
,所以第二个表甚至似乎都没有被使用。