MySQL中更新与子查询条件中同一个表中的字段数据

本文引用自:http://www.javatang.com/archives/2011/12/08/2906565.html

 

在MySQL中使用update语句的时候,Where条件或者值都可以使用子查询,比如:

  1.  UPDATE table_a SET name=(SELECT name FROM table_b WHERE id=1) 
  2.  WHERE id IN (SELECT id FROM table_c WHERE age > 24);

但是如果子查询和更新的表是同一个表的话,MySQL会报如下的错误:

Error Code : 1093
You can't specify target table 'table_a' for update in FROM clause

这种情况下就需要使用MySQL的临时表做一个中转,代码如下:

  1.  -- 将查询的结果写入到临时表中
  2.  CREATE TEMPORARY TABLE tmp_table (SELECT * FROM table_a WHERE NAME='Tom');
  3.  UPDATE table_a SET parentId=(SELECT id FROM tmp_table WHERE NAME='Tom') WHERE id = 100;
  4.  -- 删除临时表
  5.  DROP TABLE tmp_table;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值