码迷,mamicode.com
首页 > 数据库 > 详细

mysql 的delete from 和update子查询限制

时间:2018-11-12 15:43:33      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:代码   select   upd   更新   HERE   error   tle   不能   you   

最经做项目时发现的问题,好像在update时也有。。。

 

网上查到的资料如下:

 

1.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误。 


mysql> DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 ); 
ERROR 1093 (HY000): You can’t specify target table ‘tab1′ for update in FROM clause 

针对“同一张表”这个限制,撇开效率不谈,多数情况下都可以通过多加一层select 别名表来变通解决,像这样 

DELETE FROM tab1 
WHERE col1 = ( 
SELECT MAX( col1 ) 
FROM ( 
SELECT * FROM tab1 
) AS t 
); 
或这样

delete from theTable where id in
(
select id from
(
select min(id) id from theTable group by title HAVING count(*)>1
) ids
) ;


------------------------------------------------------------------------ 

2. mysql delete from where in 时后面 的查询语句里不能加where条件 


Sql代码 
      delete from `t_goods` where fi_id in (select * from ( select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null) b)  


Sql代码 
      delete from `t_goods` where fi_id in (select fi_id from `t_goods` where fs_num is null and fs_name is null and fs_type is null and fs_using is null and fs_lifetime is null)   


Sql代码 
      delete from `t_goods` where fi_id in ( select fi_id from `t_goods` )   

上面三种情况,只有中间的不能执行。 

综合起来就是mysql delete from where in 时后面 的查询语句里不能加where条件 

--------------------------------------------------------------------------- 


3. delete from table... 这其中table不能使用别名 

Sql代码 

    delete from student a where a.id in (1,2);(执行失败) 

    

     select a.* from student a where a.id in (1,2);(执行成功)

mysql 的delete from 和update子查询限制

标签:代码   select   upd   更新   HERE   error   tle   不能   you   

原文地址:https://www.cnblogs.com/chenjunsheng/p/9946585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!