【问题标题】:How to find duplicated entries which has different slug?如何找到具有不同 slug 的重复条目?
【发布时间】:2017-10-19 11:48:12
【问题描述】:

我有一个这样的 MySQL 表:

id | user_id | title | slug
------------------------------
1  | 1       | hello | hello
2  | 1       | hello | hello-1
3  | 2       | bye   | bye
5  | 3       | bye   | bye-1

我想查找重复的条目。具有相同 user_id、title 和以“-1”结尾的 slug 的条目。

这些是重复的:

1  | 1       | hello | hello
2  | 1       | hello | hello-1

这些不是,因为 user_id 不同:

3  | 2       | bye   | bye
5  | 3       | bye   | bye-1

如何找到这些重复项?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    一种简单的方法将 slug 连接在一起:

    select user_id, title, group_concat(distinct slug)
    from t
    group by user_id, title;
    

    这会将它们全部放在一排。或者,您可以使用exists

    select t.*
    from t
    where exists (select 1
                  from t t2
                  where t2.user_id = t.user_id and
                        t2.title = t.title and
                        t2.slug <> t.slug
                 );
    

    【讨论】:

      【解决方案2】:

      你可以使用 count(*) > 加入相关标题

      select * from my_table  m 
      inner  join (
          select title 
          from my_table 
          group by title
          having count(*) >1 
      ) t on t.title = m.title
      

      【讨论】:

        【解决方案3】:

        在我看来,接受的答案只是假设蛞蝓是不同的,而不是仅仅因为“-1”部分它们可能不同,这就是 OP 正在寻找的......也就是说:

        1  | 1       | hello | hello
        2  | 1       | hello | other
        

        导致重复的行,但事实并非如此。 因此,它适用于 OP 用作示例的值,但不适用于其他值...

        SELECT  *
            FROM    yourTable A1
            WHERE   EXISTS
                    (
                    SELECT  1
                    FROM    yourTable A2
                    WHERE   A1.title = A2.title 
                         AND A1.user_id=A2.user_id
                         AND (A1.slug=A2.slug OR A1.slug = CONCAT(A2.slug, "-1"))            
                    LIMIT 1, 1
                    )
        

        上面的查询试图解决“-1”问题。

        【讨论】:

          猜你喜欢
          • 2015-09-18
          • 1970-01-01
          • 2017-06-28
          • 1970-01-01
          • 1970-01-01
          • 2017-04-15
          • 2020-11-23
          • 2011-04-08
          • 1970-01-01
          相关资源
          最近更新 更多