带有内部联接的sql更新和位置

Posted

技术标签:

【中文标题】带有内部联接的sql更新和位置【英文标题】:sql update with inner join and where 【发布时间】:2017-01-25 04:41:56 【问题描述】:
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%'

由于某种原因,我遇到了语法错误:

1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 3 行的“FROM newsreactions INNER JOIN users ON newsreactions.memberId = users.id WHERE u”附近使用正确的语法

虽然想不通。 如果我将updateset 替换为select,它可以正常工作。

【问题讨论】:

用您正在使用的数据库标记您的问题。 MySQL 多表 UPDATE 语句的语法在这里可用:dev.mysql.com/doc/refman/5.6/en/update.html 【参考方案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%'

【讨论】:

【参考方案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 确实是数值。如果是这样,请不要使用单引号。

【讨论】:

谢谢!我使用了这个问题的答案:***.com/questions/9588423/…我的问题和它有什么不同? @PascalClaes:另一个问题涉及 Microsoft SQL Server,而不是 MySQL。这些是不同的 DBMS,并且 SQL 语法存在一些显着差异。多表 UPDATE 语法就是这些差异之一的示例。这是确定您正在使用的数据库(询问)很重要的一个重要原因。

以上是关于带有内部联接的sql更新和位置的主要内容,如果未能解决你的问题,请参考以下文章

带有内部联接的 SQL Server 更新

带有内部联接和子查询的 Microsoft Access 更新语句

带有联接、计数和位置的 SQL 查询

带有内部联接的 Oracle 更新语句

sql 内部联接的SQL更新

带有内部联接的 SQL 插入试图插入错误的列