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

分かりやすくを意識して情報発信!

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

UPDATE文でJOINを使用して結合されたテーブルのデータを更新しようとしたところ、 下記エラーが発生( * o * )

エラーの文面でもありますが、原因はSQLの構文エラーです。

ちょっとしたことですが、SQLの構文において気をつける必要箇所であったので記事に残しておきたいと思います。

エラー文

先ずは該当のエラーの文面を載せます。 A5;SQL(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~!!