作为工作的一部分,我被分配到一个庞大的Java EE项目,其中遍布着数百个SQL语句。我在我的计算机上设置了项目,并且能够正常部署网站并使用99%而没有问题。我遇到了一个奇怪的案例,当我尝试在网站上创建一个条目时(这是一个基于政府的形式的项目)。当程序尝试执行查询时,MySQL会抛出异常:
SELECT d.id, ..., dol.weight, d.status
FROM DeliveryOrderEJB d, InbondEJB_DeliveryOrderEJB_link lnk
LEFT JOIN DOLineEJB dol
ON dol.id=(
SELECT MIN(dol2.id)
FROM DOLineEJB dol2
WHERE d.id=dol2.DeliveryOrderEJB_lines
)
WHERE d.id=lnk.DeliveryOrderEJB_id
AND lnk.InbondEJB_itNo='...'
ORDER BY d.id
它给我的例外是Unknown column 'd.id' in 'where clause'
我感到困惑的部分是为什么它似乎在生产机器上正常工作,这似乎是我的机器上唯一失败的原因。该列明确存在于DeliveryOrderEJB表中。
谢谢!
答案 0 :(得分:1)
失败是指嵌套子查询中的d.id
:
ON dol.id=(
SELECT MIN(dol2.id)
FROM DOLineEJB dol2
WHERE d.id=dol2.DeliveryOrderEJB_lines
)
您可以修复查询:
SELECT d.id, ..., dol.weight, d.status
FROM DeliveryOrderEJB d join
InbondEJB_DeliveryOrderEJB_link lnk
on d.id=lnk.DeliveryOrderEJB_id left join
DOLineEJB dol
ON dol.id=(
SELECT MIN(dol2.id)
FROM DOLineEJB dol2
WHERE d.id=dol2.DeliveryOrderEJB_lines
)
WHERE lnk.InbondEJB_itNo='...'
ORDER BY d.id
我认为问题是因为你在机器上有不同版本的MySQL。 MySQL改变了版本5.0周围,
的语义。