在MySQL数据库中查找两列组合的重复项

时间:2013-04-24 10:55:20

标签: mysql select count duplicates distinct

我处理的数据集包含三个不同的列:pilepositioninfo

数据库中没有重复,但可能会发生,对于pileposition的一个组合,信息列中有一个或两个不同的文本。这些是我试图找到的条目。

我尝试了以下

SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db;

但收到了错误消息

ERROR 1241 (21000): Operand should contain 1 column(s)

有没有办法在两列中找到不同的值组合?

3 个答案:

答案 0 :(得分:18)

即使没有子选择也可以。

SELECT
  `pile`,
  `position`,
  COUNT(*) AS c
FROM
  db
GROUP BY
  `pile`,
  `position`
HAVING c > 1;

上面的命令显示pileposition的所有组合,这些组合在表db中出现多次。

答案 1 :(得分:0)

获取不同重复项的计数(此处优先使用组)

   select count(*)
     from (
   select pile, position
     from db
 group by pile, position
          ) x

查找实际的重复记录

   select db.*
     from (
   select pile, position
     from db
 group by pile, position
   having count(*) > 1
          ) x
     join db on db.pile = x.pile and db.position = x.position

答案 2 :(得分:0)

SELECT *
FROM db x
WHERE EXISTS (
  SELECT 1 FROM db y
  WHERE y.pile = x.pile
  AND y.position =x.postion
  AND y.other_field <> x.other_field
  );

现在,对于other_field,您可以使用一些唯一的id列或任何字段组合(当然除了{pole,postion}之外)