我不是sql专家。我试图在我的oracle sqlplus提示符下运行以下查询
选择0 AS initVal, 从accountTable JOIN loadTable ON num = accNum中选择loadTable.amount,从 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
,因为两者的结果具有此列。有什么办法可以在不指定这两个中间表之间的另一个联接的情况下摆脱此问题loadTable.amount
?
这是您的查询:
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
仅从一个表中提取the ,因此似乎根本没有使用第二个表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句