エンジニ屋.com(エンジニヤドットコム)

ITエンジニアによる開発・転職・資格取得記録などを書いてます!

【MySQL】UPDATE エラー処理:#1064 - SQL構文エラーです。バージョンに対応するマニュアルを.... 【クエリ文】

UPDATE文でJOINで結合したデータを更新しようとしたところ、下記のエラーが発生しました。エラー文面でもありますが、原因はSQLの構文エラーです。 ちょっとしたことですが、注意する箇所があったので記事に残しておきたいと思います。

エラー文

  • phpMyAdmin

    #1064 - SQL構文エラーです。バージョンに対応するマニュアルを参照して正しい構文を確認してください。

  • A5:SQL(SQL開発ツール)でのエラー文

    #4200 You have an error in your SQL syntax; check the manual that corresponds to your MairaDB server version for the right syntaxt to use near '10000'

構文の書き方は、正しいと思い込んでいたので、原因は他にあると思い込んでいましたが、単なる書き方の順番でした。

問題のSQL文

UPDATE  `dtb_customer` as c
SET point = 10000
JOIN `dtb_order` as o
   ON o.customer_id = c.id
WHERE o.payment_total >= 50000

どこが間違っているのか?
実行したい内容に関しては、dtb_customer(会員)とdtb_order(受注) のテーブルを結合しており、dtb_orderのpayment_total(支払い金額)が50000以上の場合、dtb_customerのpoint カラムに10000を追加するSQL文です。

最初は構文のエラーだと気づかず、他の問題箇所を探していました。 しかもUPDATE でググると大体がこのような書き方が出てくるので、間違いに直ぐに気づきませんでした。

正しいSQL文

UPDATE  `dtb_customer` as c
JOIN `dtb_order` as o
   ON o.customer_id = c.id
SET point = 10000
WHERE o.payment_total >= 50000

問題箇所は、SETの書く位置にありました。
SETの位置は、JOIN ONの後ろに記述することで正しく動作します。 たしかにUPDATE でテーブルを指定しているので、テーブル結合を行うJOINはUPDATEの後ろに書く流れのはずですよね。 テーブルの定義が出来たら、新しい値をSETするというイメージですね。 syntax errorが発生したときには、とりあえず記述する順番をしっかり見直そうと思います。

以上となります。 Have a nice day~!!