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

时间:2017-08-02 10:28:57

标签: sql group-by where

我有一个表格,其中有一列id,name and externalid(FK)。名称可以重复,但仅限于externalid不同。如何找出name列大于1的计数,但externalid是不同的。我尝试了以下查询。但我不确定结果。如果错误,请更正我的查询。

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

1 个答案:

答案 0 :(得分:0)

我认为您需要做的就是更改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条款中有这种逻辑。