在MySQL中直接使用子查询更新同一张表时,确实会遇到"Can't update table that is used in a WHERE clause"错误。这是因为MySQL不允许在UPDATE语句中同时读取和修改同一张表。
UPDATE your_table t
JOIN (
SELECT id, other_columns
FROM your_table
WHERE your_conditions
) AS temp ON t.id = temp.id
SET t.column_to_update = new_value;
UPDATE your_table t1, your_table t2
SET t1.column_to_update = new_value
WHERE t1.id = t2.id
AND t2.your_conditions;
SET @ids_to_update := (SELECT GROUP_CONCAT(id) FROM your_table WHERE your_conditions);
UPDATE your_table
SET column_to_update = new_value
WHERE FIND_IN_SET(id, @ids_to_update);
DELIMITER //
CREATE PROCEDURE update_self_referencing()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE temp_id INT;
DECLARE cur CURSOR FOR SELECT id FROM your_table WHERE your_conditions;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO temp_id;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE your_table SET column_to_update = new_value WHERE id = temp_id;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
CALL update_self_referencing();
根据您的具体场景和数据量,选择最适合的方案。