Java堂  


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

Filed under: Database — Jet @ 4:29 下午
Tags:
原文出处: MySQL中更新与子查询条件中同一个表中的字段数据
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

在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;

参考资料:
语法:MySQL中INSERT INTO SELECT的使用
MySQL中的临时表使用方法
关于mysql的 SELECT … INTO 语法
MySQL select into 和 SQL select into