如何用父行值更新子记录?解决MySQL 1093更新错误
解决MySQL更新时无法引用目标表的问题
你碰到的[HY000][1093]错误是MySQL的固有限制:不能在UPDATE/DELETE语句的子查询FROM子句中直接引用要修改的目标表。你原来的写法触发了这个限制,得换用JOIN的方式来实现需求。
修复后的SQL语句
UPDATE queue_items AS child JOIN queue_items AS parent ON child.origin_id = parent.id SET child.property_value = parent.property_value WHERE (child.property_value IS NULL OR LENGTH(child.property_value) < 5) AND child.origin_id IS NOT NULL;
逻辑说明
- 通过别名
child和parent区分子行与父行,用origin_id关联两者 - 直接将父行的
property_value赋值给符合条件的子行,既避开子查询的限制,执行效率也更高
安全验证建议
执行更新前,先运行以下SELECT语句确认要更新的行和对应的值是否正确,避免误操作:
SELECT child.id, child.property_value AS 旧值, parent.property_value AS 新值 FROM queue_items AS child JOIN queue_items AS parent ON child.origin_id = parent.id WHERE (child.property_value IS NULL OR LENGTH(child.property_value) < 5) AND child.origin_id IS NOT NULL;
内容的提问来源于stack exchange,提问作者user5405648
相关产品推荐
相关产品推荐

