MySQL语句在本地计算机上失败但在部署机器上失败?

时间:2013-06-07 03:18:03

标签: mysql sql java-ee

作为工作的一部分,我被分配到一个庞大的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表中。

谢谢!

1 个答案:

答案 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周围,的语义。