跳过第一个重复记录并更新其他记录

时间:2018-06-11 12:26:43

标签: mysql sql

查询1:检查是否存在重复记录:

SELECT
    id , username, COUNT(*)
FROM
   tbluser
GROUP BY
   username
HAVING 
    COUNT(*) > 1;

结果:

duplicate records

查询2:针对一个数据集监控重复记录。

select * from tbluser where username = 'abcuser1';

结果:

duplicate record

查询3 :(根据查询2中的数据,跳过第一个记录,即293,并更新所有其他重复出现的状态。

我目前的方法是跳过第一个重复记录并更新其他记录:

    SELECT CONCAT(id , ',') 
FROM    tbluser u1
WHERE   EXISTS
        (
        SELECT  1
        FROM    tbluser u2
        WHERE   u1.username = u2.username and u1.status = u2.status = 1 and u1.appId = u2.appId 
        LIMIT 1, 1
        )
        limit 1, 18446744073709551615

上面的查询为我提供了需要更新其状态的重复记录的ID。然后我将上面的结果ID粘贴到:

update tbluser set status = 0 where id in (1,2);

查询3没有给出所需的结果。它只是跳过第一条记录并提供所有其他重复记录的所有数据集。

  

如何跳过每个数据集中的第一个重复记录?

1 个答案:

答案 0 :(得分:0)

这是一种方式:

UPDATE tbluser t
JOIN (
   SELECT username, MIN(id) AS min_id
   FROM tbluser
   GROUP BY username
) AS g ON t.username = g.username AND t.id <> min_id
SET status = 0;

上述查询会更新id值大于id切片中最小username的所有记录。

Demo here