select可以取别名,delete不能。
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
);
------------------------------------------------------------------------
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 andfs_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 andfs_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);(执行成功)
delete from v9_news where title in (select title from (select title from v9_news as newsb where from_unixtime(newsb.inputtime,'%y-%m-%d')='2013-06-27' group by newsb.title having count(*) >1 ) b)
and id not in (select id from (select min(id) as id from v9_news where from_unixtime(inputtime,'%y-%m-%d')='2013-06-27' group by title having count(*)>1) c); true!!
delete from v9_news as news
where news.title in (select title from v9_news as newsb where from_unixtime(newsb.inputtime,'%y-%m-%d')='2013-06-27' group by newsb.title having count(*) >1 )
and id not in (select min(id) from v9_news where from_unixtime(inputtime,'%y-%m-%d')='2013-06-27' group by title having count(*)>1); false!!
bitscn.com
