You can't specify target table 'tablename' for update in FROM clause的解决方法

在执行下面的sql时报错

 
  
  
  
  
  1. DELETE FROM temp WHERE id IN (SELECT a.id FROM t_user t JOIN temp a ON t.email = a.email); 

这种写法在sqlserver或者oracle中是支持的,但是mysql目前是不支持的,在mysql中不能同时查询一个表的数据再同时进行删除,只能用以下的办法折中

 
  
  
  
  
  1. CREATE TABLE tmp AS SELECT a.id FROM t_user t JOIN temp a ON t.email = a.email;  
  2. DELETE FROM temp WHERE id IN (SELECT id FROM tmp); 

先将查询到的数据放到一个临时表中,然后再对临时表进行查询,然后再删除目标表中满足条件的数据。

本文出自 “乔磊的博客 学习 进步” 博客,请务必保留此出处http://sucre.blog.51cto.com/1084905/629493

你可能感兴趣的:(mysql,职场,休闲)