Как найти строки в БД mySQL, которые не имеют дубликатов? - PullRequest
0 голосов
/ 24 января 2019

У меня есть таблица:

--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. 

id и created поля являются уникальными.

Остальные строки имеют дубликаты - точно такой же набор значений (имя + col1 + col2 + col3 + .. + colN).

Тем не менее, несколько строк являются абсолютно уникальными. Как я могу их найти (row 3 в моем примере)?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете группировать по полям, которые должны быть уникальными, а затем выбирать строки, в которых количество равно единице.

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

Существует несколько решений.В зависимости от объема данных и требований к производительности вы можете добавить индексы и протестировать несколько решений для получения оптимальных результатов.

0 голосов
/ 24 января 2019

Можно использовать NOT EXISTS и коррелированный подзапрос, выбирая строки из той же таблицы с другим идентификатором, но равными значениями.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...