0

仕事の一環として、何百もの SQL ステートメントが散りばめられた大規模な Java EE プロジェクトに割り当てられました。私は自分のコンピューターにプロジェクトをセットアップし、ウェブサイトを問題なく展開し、問題なく 99% を使用することができました。しかし、1 つの奇妙なケースに遭遇しました。それは、Web サイトにエントリを作成しようとしたときです (これは、政府ベースのフォームのようなプロジェクトです)。プログラムがクエリを実行しようとすると、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 に答える