我有一个表,其中有一个列id,name and externalid(FK)
.该名称可以重复,但前提是外部 ID 不同。我怎样才能找出名称列大于 1 但外部 id 的计数数不同。我尝试了以下查询。但我不确定结果。如果错误,请更正我的查询。
SELECT ff.Name , COUNT(*) count FROM tablee ff
join tablee f on ff.ID = f.ID
where f.externalid=ff.externalid
GROUP BY ff.Name Having COUNT(*) > 1
我认为您需要做的就是更改HAVING
子句:
SELECT
ff.Name,
COUNT(*) count
FROM tablee ff
INNER JOIN tablee f
ON ff.ID = f.ID AND
f.externalid = ff.externalid
GROUP BY
ff.Name
HAVING
COUNT(DISTINCT ff.externalid) = COUNT(*) AND
COUNT(*) > 1
仅当非重复外部 ID 的数量等于名称在每个名称组中出现的次数时,此HAVING
子句才会返回 true。 这意味着每个外部 ID 对于该名称组都是唯一的。
请注意,我还将WHERE
子句的逻辑移到了连接条件中。 这对我来说看起来更干净,我不知道为什么你在WHERE
子句中有这种逻辑。