【问题标题】:I want find duplicate data? and display duplicate records only?我想查找重复数据?并仅显示重复记录?
【发布时间】:2019-04-27 19:33:09
【问题描述】:

在我的表中有这样的数据

+-----+----------+  
| sno | name     |  
+-----+----------+  
| 101 | Raju     |  
| 102 | Raju     |  
| 103 | Santhosh |  
| 104 | Santhosh |  
| 105 | madhavi  |  
| 106 | suheel   |  
+-----+----------+  

我想查找重复记录并仅显示 sno(number)
例如输出应该是这样的

+-----+  
| sno |  
+-----+  
| 101 |  
| 102 |  
| 103 |  
| 104 |  
+-----+  

【问题讨论】:

  • 你试过查询了吗?
  • 这是一个常见问题解答。请始终使用 Google 错误消息和许多清晰、简洁和特定的版本/措辞,使用和不使用您的特定字符串/名称和“site:stackoverflow.com”和标签,并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。如果您确实有要发布的非重复代码问题,请阅读并通过minimal reproducible example 采取行动。

标签: mysql duplicates


【解决方案1】:

在派生表中,获取所有具有重复项的 name 值。为此,我们可以在name 上使用GROUP BY 并使用HAVING 仅考虑那些名称,其中COUNT(*)(该name 的总行数)大于1。

现在,我们可以加入主表以获取它们各自的sno

SELECT
 t.sno
FROM your_table t
JOIN (SELECT name 
      FROM your_table 
      GROUP BY name
      HAVING COUNT(*) > 1) dt
  ON dt.name = t.name 

【讨论】:

    【解决方案2】:

    这是执行此操作的 MySQL 8+ 方式:

    SELECT sno
    FROM
    (
        SELECT t.*, COUNT(*) OVER (PARTITION BY name) cnt
        FROM yourTable t
    ) t
    WHERE cnt > 1;
    

    【讨论】:

      【解决方案3】:

      您可以尝试使用相关子查询

      select sno from tablename a 
      where name in (select 1 from tablename b where a.name=b.name having count(name)>1 )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        • 2019-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多