我有两个查询,两个查询找到重复的记录,但是它们在同一张表上返回不同的结果
查询1返回17行
SELECT minimumexperience
FROM minimumexperience
GROUP BY minimumexperience
HAVING COUNT(minimumexperience) > 1
查询2返回22行
SELECT b.id
FROM
(
SELECT id,
minimumexperience,
ROW_NUMBER() OVER(PARTITION BY lower(Trim(minimumexperience))
ORDER BY minimumexperience) AS counts
FROM minimumexperience --ORDER BY dbo.minimumexperience.minimumexperience ASC
) AS b
WHERE b.counts > 1
答案 0 :(得分:2)
一种解释是,如果给定的minimumexperience
值可能出现两次以上,例如两次以上。 3或4次,那么您的第二个查询将返回第一个查询之外的 all 个重复项。例如,如果有四个记录,其特定值为minimumexperience
:
minimumexperience | ROW_NUMBER
10 | 1
10 | 2
10 | 3
10 | 4
然后,第一个查询将报告一个重复项,而第二个查询将报告三个重复项,因为三个记录的行号都大于一个。
另一种解释是,您在第二个查询中对LOWER
和TRIM
的调用将minimumexperience
的几个先前不同的值存储在一起,然后产生类似于上面的内容。也就是说,请考虑以下三个值:
minimumexperience | ROW_NUMBER
One | 1
one | 2
ONE | 3
在第一个查询中,以上三个记录都是唯一的,但是在第二个查询中,所有三个记录都被映射到one
,因此将生成两个重复项。
如果您真的想使用解析函数来执行此操作,因为您想查找所有重复的记录,那么COUNT
会更合适:
SELECT b.id
FROM
(
SELECT id, minimumexperience,
COUNT(*) OVER (PARTITION BY minimumexperience) cnt
FROM minimumexperience
) AS b
WHERE b.counts > 1;