mysql 在一列上匹配重复项,在另一列上仅不同

mysql match duplicates on one column and ONLY different on another column

我有一个 mysql table(我们称之为 'user'),其中包含大约 700,000 行数据。比方说这是一个小样本:

UserID  DeptID  Name    Score
1       2       Bob     50
2       2       Bob     100
3       3       Jane    32
4       4       Jill    93
5       2       Bob     50
6       3       Jane    58
7       7       Jane    44

我想显示所有具有重复 'Name' 和 'DeptID' 的行,但仅不同 'Score'。 (UserID与选择无关,显示即可。)

UserID  DeptID  Name    Score
1       2       Bob     50
2       2       Bob     100
3       3       Jane    32
6       3       Jane    58

所以基本上正如您从上面看到的那样,我想要显示得分为 50 的另一个 Bob(用户 ID 5)(即使他在部门 2 ).

我的部分查询工作如下所示,但它显示了所有 Bob,但我不知道如何将其 显示分数在哪里 不同.

SELECT A.UserID, A.DeptID, A.Name, A.Score
FROM User AS A
INNER JOIN (
    SELECT Name, DeptID
    FROM User
    GROUP BY Name, DeptID
    HAVING COUNT(*) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID

此查询在相当长的时间内运行。我尝试过的所有其他方法要么给出不正确的结果、查询错误,要么永远查询 运行,我最终终止了该进程。

我知道我遗漏了一些简单的东西,但我很难看清它是什么....

编辑 - 好的,Barmar 的回答正是我想要的,谢谢! (猜猜我只是盯着我的 SQL 陈述太久了,哈哈)

这里有一个新的变化。我 希望它显示特定的人 如果 有 2 个(或更多)不同的分数(在同一个 DeptID 中)。因此,例如,如果只有两个 Bob 的值都为 50(100 不存在),则两者都不会显示。

GROUP BY A.Name, A.Score 添加到末尾,这样每个姓名和分数的组合只会显示一行。

如果您只想在同一部门内有两个不同的分数时显示它们,请使用 COUNT(DISTINCT Score) 而不是 COUNT(*)

SELECT A.UserID, A.DeptID, A.Name, A.Score
FROM User AS A
INNER JOIN (
    SELECT Name, DeptID
    FROM User
    GROUP BY Name, DeptID
    HAVING COUNT(DISTINCT Score) > 1
) AS B ON A.Name = B.Name AND A.DeptID = B.DeptID
GROUP BY A.Name, A.Score