0

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

谢谢!

4

1 回答 1

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 左右版本的语义。

于 2013-06-07T03:21:18.627 回答