2016-09-16 13 views
1
UPDATE newsreactions 
SET newsreactions.enabled = '0' 
FROM newsreactions 
INNER JOIN users ON newsreactions.memberId = users.id 
WHERE users.active = '0' AND users.comment LIKE '%spam%' 

が何らかの理由で、私は構文エラーを取得しています。ここでSQL更新が参加し、

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM newsreactions INNER JOIN users ON newsreactions.memberId = users.id WHERE u' at line 3

は、しかし、それを把握することはできません。 updatesetselectに置き換えると正常に動作します。

+3

。 –

+0

MySQLマルチテーブルのUPDATE文の構文は次のとおりです。http://dev.mysql.com/doc/refman/5.6/en/update.html – spencer7593

答えて

2

エラー1064は、MySQL構文エラーです。正しいMySQLの構文は次のとおりです。

UPDATE newsreactions nr INNER JOIN 
     users u 
     ON nr.memberId = u.id 
    SET nr.enabled = 0 
WHERE u.active = 0 AND u.comment LIKE '%spam%'; 

注:

  • JOINUPDATE句になります。
  • テーブルのエイリアスを使用すると、クエリの書き込みと読み取りが容易になります。
  • 私は、enabledactiveが本当に数値であると推測しています。その場合は、一重引用符を使用しないでください。
+0

Thx!私はこの質問への答えを使用しました:http://stackoverflow.com/questions/9588423/sql-server-inner-join-when-updating 私の質問はそれとどのように違うのですか? –

+1

@PascalClaes:その他の質問は、MySQLではなくMicrosoft SQL Serverに関するものです。それらは異なるDBMSであり、SQL構文にはいくつかの重要な違いがあります。マルチテーブルのUPDATE構文は、これらの違いの1つの例です。これは、使用しているデータベースを特定することが重要な大きな理由です(尋ねる)。 – spencer7593

1

join句はset句の前に来るべき、とMySQLにはfrom句があってはならない:使用しているデータベースであなたの質問にタグを

UPDATE newsreactions 
JOIN users ON newsreactions.memberId = users.id 
SET newsreactions.enabled = '0' 
WHERE users.active = '0' AND users.comment LIKE '%spam%'