MySQLのLEFTは5.0.12の変更後に登録しよう - 問合せをリライトする方法
-
22-08-2019 - |
質問
5.0.12た後、MySQLは、左の構文を変更しSQL2003の標準に一致するように結合します。だから、
... FROM t1 , t2 LEFT JOIN t3 ON (expr)
タグとして書き換える必要があります
... FROM (t1 , t2) LEFT JOIN t3 ON (expr
またはそうでなければ... FROM t1 , (t2 LEFT JOIN t3 ON (expr))
さて、私は私が5.1にMySQLの3.23(!EEK)からの移植だ古代のアプリを持っているし、古いコードは、このクエリがあります:
select b.*, c.*, g.*, p.perfname, p.persname
from bookings b, customer c
left join grade g on b.chrggrade=g.grcode
left join person p on b.person=p.percode
where complete='Y' and invoiced='N'
and datemade between '2009-03-25' and '2009-03-31'
and c.custcode=b.cust
order by cust, person, tsref, stdt
これは、SQLエラー1054、b.chrggradeで未知の列で失敗します。それは
として解析しているためですを選択し、B。の、C。の、グラム。*、p.perfname、p.persname 予約Bから、(顧客C b.chrggradeにグレードグラムに参加左= g.grcode) 左b.person = p.percode上の人物Pに参加 ここでa =「Y」完全かつ請求=「N」 そしてdatemade「2009-03-25」と「2009-03-31」の間 そしてc.custcode = b.cust カストによって順序、人、tsref、STDT
私は考えてます。
私は正しく配置され、ブラケットは、この問題を解決することができると確信していますが、私は困惑します。 私は http://bugs.mysql.com/bug.phpで、この変更への参照を見つけました参加シンプルな左を修正する方法を示していますが、私はまだこのクエリのためにそれをうまくできないのですか?ID = 13551 を、。 デビッド
解決
完全にコンマ構文を使用して停止し、あなたのJOINステートメントで明示的です。あなたが実行されないことがありますWHERE句に結合条件を置くためにコンマ構文力LEFT後まで/ RIGHTそれが解析されています方法に応じて、結合します。明示的に使用すると、とにかく、クエリが読みやすくなりJOINSます。
... FROM T1、T2のLEFT(expr)はON T3をJOIN となり ... T1 INNER FROM(expr)は
ON T3をJOIN(expr)は左側にT2をJOINこれはまた、あなたが見ているエラーを修正します。予約テーブルにはchrggradeがない場合を除き、何もエラーを解決しません。