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

15

我在处理一个拥有三个不同列的数据集,分别是:pilepositioninfo

数据库中没有重复数据,但是有可能出现一组 pileposition 对应着 info 列中的一个或两个不同的文本。这些是我试图查找的记录。

我的尝试如下:

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

但是收到了一个错误消息

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

有没有一种方法可以找到两列中不同值的组合?


尝试这个 SELECT COUNT(DISTINCT(pile+position)) FROM db; - Prahalad Gaggar
3个回答

35

即使没有子查询,这也可以正常工作。

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

上述命令显示表格 db 中出现超过一次的所有 pileposition 的组合。


获取重复数据从未如此简单。谢谢。 - Samuel Bié

0

要获取不同重复项的计数(这里优先使用 group by)

   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

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, position})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接