带有内部联接的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”附近使用正确的语法
虽然想不通。
如果我将update
和set
替换为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
子句中。
表别名使查询更易于编写和阅读。
我猜enabled
和active
确实是数值。如果是这样,请不要使用单引号。
【讨论】:
谢谢!我使用了这个问题的答案:***.com/questions/9588423/…我的问题和它有什么不同? @PascalClaes:另一个问题涉及 Microsoft SQL Server,而不是 MySQL。这些是不同的 DBMS,并且 SQL 语法存在一些显着差异。多表 UPDATE 语法就是这些差异之一的示例。这是确定您正在使用的数据库(询问)很重要的一个重要原因。以上是关于带有内部联接的sql更新和位置的主要内容,如果未能解决你的问题,请参考以下文章