mysql 的delete from 子查询限制

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
        i_subject_schedule
    WHERE SUBJECT_SCHEDULE_ID IN (SELECT t.* FROM (SELECT iss.SUBJECT_SCHEDULE_ID FROM
        i_subject_schedule iss
    JOIN
        i_grade_subject_teacher igst ON iss.GRADE_SUBJECT_TEACHER_ID = igst.GRADE_SUBJECT_TEACHER_ID
    JOIN
        i_grade_subject igs ON igst.GRADE_SUBJECT_ID = igs.GRADE_SUBJECT_ID
    JOIN
        t_gradeinfo tg ON tg.GRADEINFO_ID = igs.GRADEINFO_ID
    WHERE
        tg.GRADEINFO_ID='3f45f9d0-352a-11e2-ba74-0050569f303b'
        AND iss.SEMESTERINFO_ID='49') AS t);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值