MySQLのLEFTは5.0.12の変更後に登録しよう - 問合せをリライトする方法

StackOverflow https://stackoverflow.com/questions/700779

  •  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がない場合を除き、何もエラーを解決しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top