2016-09-16 75 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

不能弄明白虽然。 如果我用select代替updateset,它工作正常。

+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%'; 

注:

  • JOIN那张UPDATE子句。
  • 表别名使得查询更易于编写和读取。
  • 我猜测enabledactive确实是数值。如果是这样,不要使用单引号。
+0

Thx!我用这个问题的答案:http://stackoverflow.com/questions/9588423/sql-server-inner-join-when-updating 我的问题是如何不同? –

+1

@PascalClaes:另一个问题涉及Microsoft SQL Server,而不是MySQL。这些是不同的DBMS,并且在SQL语法上有一些显着差异。多表UPDATE语法就是其中一种差异的例子。这是确定你使用哪个数据库(询问)很重要的一个重要原因。 – spencer7593

1

join条款应该是来set条款面前,应该没有from子句中的MySQL:

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