【问题标题】:skip first duplicate record and update others跳过第一条重复记录并更新其他记录
【发布时间】:2018-11-20 16:54:37
【问题描述】:

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

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

结果:

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

select * from tbluser where username = 'abcuser1';

结果:

查询 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 没有给出想要的结果。它只是跳过第一条记录并给出所有数据集的所有其他重复记录。

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这是一种方式:

    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 值大于username 切片中的最小值id 的记录。

    Demo here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 2012-04-12
      • 2013-10-26
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 2015-04-23
      相关资源
      最近更新 更多