2012-08-15 67 views
2

有,为什么下面的UPDATE语句会产生一个错误更新与INNER JOIN失败,但相关的SELECT语句的工作

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' 

回答

5

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

啊,当然!谢谢 :) – xylar 2012-08-15 11:50:16

0

使用此语法做到这一点:

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