本文引用自:http://www.javatang.com/archives/2011/12/08/2906565.html
在MySQL中使用update语句的时候,Where条件或者值都可以使用子查询,比如:
- UPDATE table_a SET name=(SELECT name FROM table_b WHERE id=1)
- 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的临时表做一个中转,代码如下:
- -- 将查询的结果写入到临时表中
- CREATE TEMPORARY TABLE tmp_table (SELECT * FROM table_a WHERE NAME='Tom');
- UPDATE table_a SET parentId=(SELECT id FROM tmp_table WHERE NAME='Tom') WHERE id = 100;
- -- 删除临时表
- DROP TABLE tmp_table;