更新和双重内部连接启动mysql错误
我正在尝试对双更新和双重内部连接启动mysql错误,mysql,sql,Mysql,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 pro_users AS u INNER JOIN cAlerts AS c ON c.user_id = u.user_id I' at line 3
内部联接执行更新
,并得到以下错误:
#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
你能发现我的错误吗?你能试试这个吗:
UPDATE
pro_users AS u
SET
u.active_member = 0
WHERE
u.active_member = 1
AND
(
SELECT c.user_id
FROM cAlerts AS c
WHERE c.user_id = u.user_id AND c.status = 0
LIMIT 1
) IS NOT NULL
AND
(
SELECT s.user_id
FROM srAlerts AS s
WHERE s.user_id = u.user_id AND s.active = 0
LIMIT 1
) IS NOT NULL
我认为这会很好:
UPDATE pro_users AS u
INNER JOIN cAlerts AS c
ON c.user_id = u.user_id AND c.status=0
INNER JOIN srAlerts AS s
ON s.user_id = c.user_id AND s.active=0
SET u.active_member = 0
WHERE 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异常
编辑说明:在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
使用UPDATE pro_users,我认为它不知道别名。当我使用该语法时,我在set子句中不使用别名。我尝试使用“UPDATE pro_users”而不是“UPDATE u”,但这不起作用。可以说,ISO/ANSI SQL方式是唯一允许我通过的语法。谢谢