【问题标题】:sql update with inner join and where带有内部联接的sql更新和位置
【发布时间】: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 sql sql-update syntax-error


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

    【讨论】:

    • 谢谢!我使用了这个问题的答案:stackoverflow.com/questions/9588423/…我的问题和它有什么不同?
    • @PascalClaes:另一个问题涉及 Microsoft SQL Server,而不是 MySQL。这些是不同的 DBMS,并且 SQL 语法存在一些显着差异。多表 UPDATE 语法就是这些差异之一的示例。这是确定您正在使用的数据库(询问)很重要的一个重要原因。
    猜你喜欢
    • 2011-03-28
    • 2011-04-21
    • 2012-10-04
    • 2015-03-17
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2013-07-19
    相关资源
    最近更新 更多