查询未列出 sql 中的重复记录?
Query not listing duplicate records in sql?
我正在使用以下查询查找重复记录
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)
子查询 returns 218 条记录是重复记录,但是当我尝试对 return name 和 id 执行查询时,它 returns 超过 10k 条记录,其中有很多空 ID 列。
嗯,你处理的是重复项,所以有很多。
您可以通过绘制直方图的直方图来了解有多少重复:
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;
此外,您的原始查询更简单地使用 window 函数编写:
SELECT e.*
FROM (SELECT e.*, COUNT(*) OVER (PARTITION BY CIVILID) as cnt
FROM dBO.EMPUDF
) e
WHERE cnt > 1;
我正在使用以下查询查找重复记录
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)
子查询 returns 218 条记录是重复记录,但是当我尝试对 return name 和 id 执行查询时,它 returns 超过 10k 条记录,其中有很多空 ID 列。
嗯,你处理的是重复项,所以有很多。
您可以通过绘制直方图的直方图来了解有多少重复:
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;
此外,您的原始查询更简单地使用 window 函数编写:
SELECT e.*
FROM (SELECT e.*, COUNT(*) OVER (PARTITION BY CIVILID) as cnt
FROM dBO.EMPUDF
) e
WHERE cnt > 1;