检查 where 子句中同一表中具有不同外键 id 的重复条目



我有一个表,其中有一个列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子句中有这种逻辑。

最新更新