mysql delete where not in

mysql中 
Java代码   收藏代码
  1. delete from sns_hits where id not in (123)  
是没有问题的 
Java代码   收藏代码
  1. delete from sns_hits where id not in (select id from another_table)  
也是麽有问题的 

但是  
Java代码   收藏代码
  1. delete from sns_hits where id not in (select id from sns_hits)   
就TMD有问题了 

解决棒法是创建临时表 
Java代码   收藏代码
  1. CREATE TEMPORARY TABLE tmp_sns_hits (  
  2.   `id` BIGINT(20)   


亲自实验的demo:

DELETE from user WHERE id not in (SELECT id from user WHERE id >4)  
----此语句执行报错[Err] 1093 - You can't specify target table 'user' for update in FROM clause


DELETE from user WHERE id not in (SELECT * from (SELECT id from user u WHERE u.id>4)u)  
-----执行成功


总结:此种删除时建立临时表是关键。。。。

你可能感兴趣的:(mysql)