mysql - UPDATE with INNER JOIN 失败,但相关的 SELECT 语句有效

标签 mysql sql-update inner-join

下面的 UPDATE 语句产生错误是否有原因

UPDATE `t1`
INNER JOIN `t2` ON `t2`.`id`=`t1`.`t2_id`
INNER JOIN `t3` ON `t2`.`t3_id` = `t3`.`id` AND `t3`.`a_id` = '123'
WHERE `t2`.`date` > '2012-08-14'
    AND `t2`.`status` = 'pending'
SET `t1`.`active` = '0';

我得到的错误是:

#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 'WHERE `t2`.`date` > '2012-08-14' AND `t2`.`statu' at line 4

以下(相关的)SELECT 语句可以正常工作

SELECT `t1`.*
FROM `t1`
INNER JOIN `t2` ON `t2`.`id`=`t1`.`t2_id`
INNER JOIN `carer` ON `t2`.`t3_id` = `t3`.`id` AND `t3`.`a_id` = '123'
WHERE `t2`.`date` > '2012-08-14'
    AND `t2`.`status` = 'pending'

最佳答案

MySQL UPDATE syntax是:

UPDATE [LOW_PRIORITY] [IGNORE] table_references  
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...  
    [WHERE where_condition]  

使用这个:

UPDATE `t1`
INNER JOIN `t2` ON `t2`.`id`=`t1`.`t2_id`
INNER JOIN `t3` ON `t2`.`t3_id` = `t3`.`id` AND `t3`.`a_id` = '123'

SET `t1`.`active` = '0'

WHERE `t2`.`date` > '2012-08-14'
    AND `t2`.`status` = 'pending' ;

关于mysql - UPDATE with INNER JOIN 失败,但相关的 SELECT 语句有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968696/

相关文章:

sql - 如何使用生成多行的 select 语句更新表?

MySQL 多重内部连接、联合和 where 子句

mysql - 如何优化内连接

sql - 如何防止内部连接查询重复(Postgres)

php - 将查询解析为变量不起作用 Laravel

sql - 如何仅使用 SQL 减去 mySQL 表中的所有价格?

mysql - 列出 MySQL 表外键的高效方法?

mysql - 谷歌数据工作室 : cumulative column

sql - 更新数组内的复合类型

mysql - 加速通过 Select 语句循环的 SQL 更新语句