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

Posted

技术标签:

【中文标题】查找 MySQL 数据库中两列组合的重复项【英文标题】:Find duplicates for combination of two columns in a MySQL database 【发布时间】:2013-04-17 21:29:07 【问题描述】:

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

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

我尝试了以下

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

但收到错误消息

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

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

【问题讨论】:

试试这个SELECT COUNT(DISTINCT(pile+position)) FROM db; 【参考方案1】:

即使没有子选择也可以使用。

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

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

【讨论】:

获得副本从未如此简单。谢谢你。【参考方案2】:

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

   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

【讨论】:

【参考方案3】:
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 除外)

【讨论】:

以上是关于查找 MySQL 数据库中两列组合的重复项的主要内容,如果未能解决你的问题,请参考以下文章

查找DataFrame中两列之间的时间差[重复]

如何让excel中两列数据互相找相同字段自动对齐

如何计算Python Pandas中两列之间的日期差异[重复]

mysql互换表中两列数据

mysql互换表中两列数据

mysql互换表中两列数据方法