• mysql去除重复数据


    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 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);(执行成功)


    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!!

  • 相关阅读:
    SQL Server 与 Entity Framework 级联删除
    web api 2 学习笔记 (Odata ODataQueryOptions 使用)
    【建议收藏】设计师必备-史上最全的个人资料页面设计模板下载
    浅谈产品经理入门和学习路径
    最全面!2019年最新UX设计趋势预测合集
    最新Dashboard设计实例、技巧和资源集锦,视觉和功能两不误,妥妥的!
    【技巧分享】设计师如何向开发人员顺利交付作品?
    摹客iDoc201901-2新功能点评
    企业类Web原型制作分享-Kraftwerk
    【新年福利】2019年值得一用的8款协作工具
  • 原文地址:https://www.cnblogs.com/gaoyinghui/p/3234634.html
Copyright © 2020-2023  润新知