mysql - UPDATE 和双重 INNER JOIN 引发 mysql 错误

标签 mysql sql

我正在尝试对双重 INNER JOIN 执行 UPDATE,但出现以下错误:

#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 pro_users AS u INNER JOIN cAlerts AS c ON c.user_id = u.user_id I' at line 3

这是我的 mysql 代码:

 UPDATE u 
  SET u.active_member = 0
  FROM pro_users AS u
  INNER JOIN cAlerts AS c
   ON c.user_id = u.user_id
  INNER JOIN srAlerts AS s  
   ON s.user_id = c.user_id
  WHERE c.status=0  
  AND s.active=0 
  AND u.active_member = 1

你能发现我的错误吗?

最佳答案

这将是执行更新的 ISO/ANSI SQL 方式:

update pro_users u set active_member = 0
where u.active_member = 1
  and exists ( select *
               from cAlerts c
               where c.user_id = u.user_id
                 and c.status  = 0
             )
  and exists ( select *
               from srAlerts sr
               where sr.user_id = u.user_id
                 and sr.active = 0
             )

据我所知,update 语句中的 from 子句(有或没有连接)是 Microsoft/Sybase Sql Server 的异常。

编辑说明:在 http://dev.mysql.com/doc/refman/5.0/en/update.html 的 mySql 手册中进行了一些翻找。一些 SQLFiddling 说这会起作用:

update pro_users u
join cAlerts  c  on c.user_id  = u.user_id and c.status  = 0
join srAlerts sr on sr.user_id = u.user_id and sr.active = 0
set active_member = 0
where u.active_member = 1

关于mysql - UPDATE 和双重 INNER JOIN 引发 mysql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496546/

相关文章:

mysql - 相同的执行路径、数据和原理图;不同的查询时间

mysql - 表选择查询在mysql中给出别名

PHP/MySQL 问题插入数组

php - HTML 表格 EXCEL PHP MYSQL

mysql - MySQL 触发错误 1326

java - JDBC 结果集 - 无法检索别名列

java - Blackberry 的数据库选项

mysql - 创建以不同方式分隔线的 View

sql - 如何在 Azure Data Studio 中查看 SQL 代理?

SQL Server 不处理 NText、Text、Xml 或 Image 数据类型的比较