如何找到具有相等列的行?

Pau*_*jan 5 mysql sql aggregate

如果我有一个包含重要 2 列的表格,

CREATE TABLE foo (id INT, a INT, b INT, KEY a, KEY b);
Run Code Online (Sandbox Code Playgroud)

我怎样才能找到所有的行,a并且b在两行中都相同?例如,在这个数据集中

id | a | b
----------
1  | 1 | 2
2  | 5 | 42
3  | 1 | 42
4  | 1 | 2 
5  | 1 | 2
6  | 1 | 42
Run Code Online (Sandbox Code Playgroud)

我想取回所有行,id=2因为它在(a,b). 基本上,我想找到所有会阻止

ALTER TABLE foo ADD UNIQUE (a, b);
Run Code Online (Sandbox Code Playgroud)

比 n^2 for 循环更好的东西会很好,因为我的表有 10M 行。

对于奖励积分:如何删除除一行之外的所有行(我不在乎哪些行,只要还剩下一行)

Jam*_*son 1

SELECT * 
FROM foo first
JOIN foo second
  ON ( first.a = second.a
       AND first.b = second.b ) 
  AND (first.id <> second.id )
Run Code Online (Sandbox Code Playgroud)

应该列出所有行,其中不止一行具有相同的 a 和 b 组合。

只是希望你在 a 和 b 列上有一个索引。