【问题标题】:Query not listing duplicate records in sql?查询不列出sql中的重复记录?
【发布时间】:2018-03-19 13:20:12
【问题描述】:

我正在使用以下查询来查找重复记录

SELECT F.ID,f.CIVILID
FROM DBO.EMPUDF AS F
WHERE f.civilid IN (SELECT CIVILID
                    FROM dBO.EMPUDF
                    GROUP BY CIVILID
                    HAVING COUNT (CIVILID) > 1) 

子查询返回 218 条重复记录,但是当我尝试执行查询以返回 name 和 id 时,它返回了超过 10k 条记录,其中包含许多空 id 列。

【问题讨论】:

  • 没什么奇怪的。 218 个civilid 中的每一个都有 2 到 10,000 条记录(可能)不同的ID
  • @AlexKudryashev,我需要选择 218 条有名字的记录
  • @coffemug,您必须在子查询或外部查询中处理空值。
  • @YogeshSharma ,我添加了 where 子句 where civil is not null ,即使结果相同
  • 然后显示你的查询尝试和期望的结果。

标签: sql sql-server-2008 select subquery linked-server


【解决方案1】:

嗯,你正在处理重复,所以它们有很多。

您可以通过制作直方图的直方图了解有多少重复:

SELECT cnt, COUNT(*), MIN(CIVILID), MAX(CIVILID)
FROM (SELECT CIVILID, COUNT(*) as cnt
      FROM  dBO.EMPUDF
      GROUP BY CIVILID
     ) c
GROUP BY cnt
ORDER BY cnt;

此外,您的原始查询更简单地使用窗口函数编写:

SELECT e.*
FROM (SELECT e.*, COUNT(*) OVER (PARTITION BY CIVILID) as cnt
      FROM  dBO.EMPUDF
     ) e
WHERE cnt > 1;

【讨论】:

  • 如何在您的查询中列出姓名和cilid
  • Tthe 查询正在打印大约 10 k 条记录,包括 null id 列,即使我在 where 子句中添加的不是 null。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多