如何在mySQL DB中查找没有重复的行?

时间:2019-01-24 11:58:05

标签: mysql sql

我有一张桌子:

--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字段是唯一的。

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

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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

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