zoukankan      html  css  js  c++  java
  • mysql 的delete from 和update子查询限制

    最经做项目时发现的问题,好像在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);(执行成功)

  • 相关阅读:
    【C++】虚函数
    ZF-net
    bzoj1061【NOI2008】志愿者招募
    highcharts 绘制图标的JAVASCRIPT 类库 收藏
    C语言中的const,free使用方法具体解释
    Java Transaction Management
    从有序数组中查找某个值 low_bound
    [华为机试练习题]35.找零钱
    1.9算法入门之进制转换
    uboot移植rtc
  • 原文地址:https://www.cnblogs.com/chenjunsheng/p/9946585.html
Copyright © 2011-2022 走看看