【问题标题】:How to find rows in mySQL DB which have no duplicates?如何在 mySQL DB 中查找没有重复的行?
【发布时间】:2019-01-24 11:58:05
【问题描述】:

我有一张桌子:

--id---name---col1--col2--col3...-colN--created. 
--1---myName---col1--col2--col3...-colN--created1. 
--2---myName---col1--col2--col3...-colN--created2. 
--3---myOtherName---Othercol1--Othercol2--Othercol3...-OthercolN--created3. 

idcreated 字段是唯一的。

其余行有重复项 - 完全相同的一组值 (name+col1+col2+col3+..+colN)。

但是,很少有行是完全唯一的。 我怎样才能找到它们(在我的示例中为row 3)?

【问题讨论】:

  • 无法将您带到您卡住的地方。正如您所说,您有两个唯一列,那么您应该仅使用这两列来获取所需的行。
  • @Kandy,我只知道:--id---name---col1--col2--col3...-colN--created。
  • @Kandy,所以我必须找到“myOtherName”,因为它是独一无二的。
  • 正如你所说的 Myname-col1-----colLn 它可能包含重复而不是它的唯一性,而且如果你有 id 和 creted3 列是唯一的,它总是会返回一行
  • @Kandy,我有一个 3 行的例子。您可以看到其中 2 个是完全独特的(除了 id 和 created)——所以我对它们不感兴趣。但是第三行是唯一的,所以我试图在完整的行列表中找到它。

标签: mysql sql


【解决方案1】:

您可以使用NOT EXISTS 和相关子查询从同一个表中选择具有不同 ID 但值相等的行。

SELECT *
       FROM elbat t1
       WHERE NOT EXISTS (SELECT *
                                FROM elbat t2
                                WHERE t2.id <> t1.id
                                      AND t2.col1 = t1.col1
                                      AND t2.col2 = t1.col2
                                      AND t2.col3 = t1.col3
                                      ...
                                      AND t2.coln = t1.coln);

【讨论】:

  • 看起来正是我想要的。谢谢您的支持!祝您在所有项目中好运!
【解决方案2】:

您可以按必须唯一的字段进行分组,然后选择计数等于 1 的行。

SELECT *
FROM
  mytable
  INNER JOIN (
               SELECT id
               FROM
                 mytable
               GROUP BY
                 col1, col2, col3
               HAVING
                 COUNT(*) = 1
             ) t
    ON mytable.id = t.id;

有多种解决方案。根据数据量和性能要求,您可以添加索引并测试几个解决方案以获得最佳结果。

【讨论】:

  • 感谢您的支持!
猜你喜欢
  • 2019-08-08
  • 1970-01-01
  • 2015-11-01
  • 2017-03-30
  • 2018-12-25
  • 2012-08-20
  • 2022-01-15
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多