【问题标题】:UPDATE with INNER JOIN fails but related SELECT statement works带有 INNER JOIN 的 UPDATE 失败,但相关的 SELECT 语句有效
【发布时间】:2012-08-11 17:05:57
【问题描述】:

下面的 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 sql-update inner-join


    【解决方案1】:

    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' ;
    

    【讨论】:

      【解决方案2】:

      使用这个语法来做到这一点:

      UPDATE r
      INNER JOIN ENGING_DERIVE r
      FROM ENGING_DERIVE
      SET r.TUNING_PERFORM = r.BORE * r.STROKE
      WHERE t.ID = t.ID;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        • 2021-12-26
        • 2012-10-09
        相关资源
        最近更新 更多