【问题标题】:Find duplicates for combination of two columns in a MySQL database查找 MySQL 数据库中两列组合的重复项
【发布时间】: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;

标签: mysql select count duplicates distinct


【解决方案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} 除外)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2021-03-29
      • 2017-02-09
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多