zoukankan      html  css  js  c++  java
  • 删除重复记录并保留最大小最小主键行

    一、需求,删除dname重复的记录,并且保留,id最小的,或最大的一行
    id    dname
    1    事业部
    2    销售部
    3    技术部
    4    测试部
    5    技术部
    6    事业部
    7    事业部

    1.按dname分组,统计条数
    select
        count(id) count,dname
    from dept
    group by dname

    count dname
    3   事业部
    2   技术部
    1   测试部
    1   销售部
    2.按dname分组,统计条数,筛选出count大于1的dname
    select
        dname
    from dept
    group by dname
    having count(id)>1

    dname
    事业部
    技术部
    3.查询出所有有重复的记录
    select * from dept
    where dname in
    (
            select dname from dept
            group by dname
            having count(id)>1
    )
    4.按dname分组,取每组中id最小的记录
    select min(id),dname from dept
    group by dname
    having count(id)>1

    id
    1
    3
    5.根据3的查询结果,除于4中的记录,就是要删除的记录
    select * from dept
    where dname in
    (
            select dname from dept
            group by dname
            having count(id)>1
    )
    and id not in
    (
        select min(id) id from dept
        group by dname
        having count(id)>1
    )

    id dname
    5   技术部
    6   事业部
    7   事业部
    6.删除指定的记录
    delete from dept where id in(
        select id from (
            select * from dept
                where dname in
                (
                        select dname from dept
                        group by dname
                        having count(id)>1
                )
                and id not in
                (
                    select min(id) id from dept
                    group by dname
                    having count(id)>1
                )
        )temptable
    )
  • 相关阅读:
    jsp 页面获取当前路径
    html5 页面音频
    微信关于网页授权access_token和普通access_token的区别
    Texlive source
    vscode 快捷键
    vscode setting
    vscode extension 插件管理
    what
    linux manual
    java tool type
  • 原文地址:https://www.cnblogs.com/chaeyeon/p/7068421.html
Copyright © 2011-2022 走看看