删除重复数据,只保留ID最小的一条数据

最近遇到一个问题,就是使用的rm_user_department的重复数据过多,需要删除重复数据,在网上找的sql,照着写的基本上运行都有错误,现在将自己写的贴出来给大家看看.

rm_user_department 的表结构如图:

select * from rm_user_department

DELETE
FROM
    rm_user_department  --这里不能使用别名,如果使用别名会报错
WHERE
    (
        user_id,
        dep_id,
        user_type
    ) IN (

select a.userID,a.depId,a.user_type from ( -- 这里需要套一层a,如果去掉这个a,会报错: You can‘t specify target table ‘rm_user_department‘ for update in FROM clause

        SELECT
            user_id as userID,
            dep_id as depId,
            user_type --     COUNT(*)
        FROM
            rm_user_department
        GROUP BY
            user_id,
            dep_id,
            user_type
        HAVING
            COUNT(*) > 1
) a
    )
AND id NOT IN (
SELECT b.id from ( -- 这里b和上面的a是同理
    SELECT
        MIN(tt.id) AS id
    FROM
        rm_user_department tt
    GROUP BY
        user_id,
        dep_id,
        user_type
    HAVING
        COUNT(*) > 1
) b
);

大家使用的时候,只需要将我的代码复制下来,将表名改一下就好啦

时间: 2024-11-11 09:47:32

删除重复数据,只保留ID最小的一条数据的相关文章

sql 多个字段分组,删除重复记录,保留ID最小的一条

IF OBJECT_ID('cardDetail') IS NOT NULL DROP TABLE cardDetail CREATE TABLE cardDetail ( id INT IDENTITY(1,1) PRIMARY KEY, cardNO VARCHAR(8), NAME VARCHAR(30), idCard VARCHAR(18), cardState CHAR(1)--卡片状态 1正常 2注销 ) INSERT cardDetail(cardNO,NAME,idCard,c

Mysql删除重复记录,保留id最小的一条

mysql 查询重复字段,及删除重复记录的方法MySQL, 数据库, 数据库, 字段, 服务器数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易:SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易:SELECT `name`,count(`name`) as count FROM `

删除重复项,只保留id最小的一项

DELETE FROM spider_927 WHERE 1=1 AND title in (SELECT * FROM ( (SELECT title titles FROM spider_927 GROUP BY title HAVING COUNT(title)>1) ) a) AND id not in (SELECT * FROM ( (SELECT MIN(id) ids FROM spider_927 GROUP BY title HAVING COUNT(title)>1) )

Mysql 删除重复数据只保留id最小的

DELETE FROM 表 WHERE id NOT IN ( SELECT id FROM ( SELECT min(b.id) AS id FROM 表 b GROUP BY b.重复字段 ) b )

mysql删除重复记录,保存Id最小的一条

方法1: 1.创建一个临时表,选取需要的数据. 2.清空原表. 3.临时表数据导入到原表. 4.删除临时表. mysql> select * from student; +----+------+ | ID | NAME | +----+------+ | 11 | aa | | 12 | aa | | 13 | bb | | 14 | bb | | 15 | bb | | 16 | cc | +----+------+ 6 rows in set mysql> create temporar

MSSQL 删除重复并只保留一条

重复值查找 select field1,field2 from table group by field1,field2 having COUNT(*)>1 删除重复值,只保留ID最小的那条 delete table where field1 in (select field1 from VersionProductRelation a group by field1,field2 having COUNT(*)>1) and field2 in (select field2 from Ver

【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录

根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享. package shuai.study.map; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import j

MYSQL 删除重复记录,只保留最大ID

table : productprice table column : id ,productAsin ... 同一个productAsin 只保留最近的那条,即只保留ID 最大的. 第一步: 查出有重复的记录和最大的id SELECT productAsin,MAX(id) maxId FROM productprice GROUP BY productAsin HAVING COUNT(id) >= 2)tempt 第二步:查出在重复记录的,并且小于最大的id SELECT productp

删除Map中Value重复的记录,并且只保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "3