SQL更新同表前一行数据报错1093,求解决方案
解决MySQL UPDATE语句1093错误
错误原因
MySQL有语法限制:不能在UPDATE或DELETE语句的FROM子句中直接引用要更新的目标表,这是为了避免查询过程中出现数据不一致问题。你原语句里直接在子查询中引用了transactions表,触发了这个限制。
另外注意:你原语句的子查询用了WHERE transaction_type = 1,但实际需求是取transaction_id = 123的final_balance,这里逻辑需要修正——如果transaction_type = 1对应多行数据,子查询会返回多个值,执行时也会报错。
解决方案
方法1:将子查询包装为派生表
把原查询包装成临时派生表,让MySQL先计算出独立的临时结果集,再用于更新操作:
UPDATE transactions SET initial_balance = ( SELECT final_balance FROM (SELECT final_balance FROM transactions WHERE transaction_id = 123) AS temp_table ) WHERE transaction_id = 124;
方法2:使用自连接更新(推荐,性能更优)
通过自连接关联需要更新的行和提供数据源的行,直接完成赋值操作:
UPDATE transactions t1 JOIN transactions t2 ON t2.transaction_id = 123 SET t1.initial_balance = t2.final_balance WHERE t1.transaction_id = 124;
这两种方法都能绕过1093错误,同时准确满足你的业务需求。
内容的提问来源于stack exchange,提问作者Marco Antonio De La Pea Velzqu
相关产品推荐
相关产品推荐

