Как найти повторяющиеся записи в базе данных MySQL - PullRequest
0 голосов
/ 04 мая 2018

У меня есть таблица с записями 60 КБ, мне нужно найти записи, которые являются дубликатами, основанными на столбце Crime ID, так что я выяснил это:

SELECT * FROM crimedata GROUP BY `Crime ID` HAVING COUNT(`Crime ID`) > 1

Этот запрос возвращает, сколько раз встречался конкретный Crime ID. Поскольку большая часть Crime ID появлялась дважды, это работало, но у меня также есть 10 тыс. Записей, где Crime ID пусто (не ноль), и этот запрос не может это различить. Мне нужен запрос, который будет возвращать каждый Crime ID, который является дубликатом и оставит один как первый уникальный.

Crime ID | column2 | column3 |
------------------------------
abc            a        b        1
abc            a        a        2
a              b        b        3
b              b        b        4
a              a        a        5
b              a        a        6
abc            b        a        7

Из этого примера запрос вернет 2, 5, 6, 7 записи.

Ответы [ 3 ]

0 голосов
/ 06 мая 2018

Вы можете использовать ранг.

SELECT* from (
    SELECT `Crime ID`, `column 2`, `column 3`, Rank() over (partition by CrimeID order by `Crime ID`) as myrank
    FROM crimedata
) rankedlist
WHERE myrank = 1

Если вы хотите выбрать дубликаты записей и игнорировать оригиналы, вы можете выбрать WHERE myrank > 1

Если вы заказываете что-то значимое, например, дату подачи (если вы отслеживаете это), вы сможете выбрать запись, которая была там раньше других.

Выбор дубликатов записей позволит вам собирать данные из них и объединять их с исходной записью, если это ваше намерение.

0 голосов
/ 08 мая 2018

Я узнал, как получить то, что хотел.

SELECT *
FROM
    table
GROUP BY
    `column1`, 
    `column2`, 
    `column3`,
HAVING COUNT(`column1`) > 1
    AND COUNT(`column2`) > 1
    AND COUNT(`column3`) > 1

Это возвращает мне все записи, которые появляются в базе данных более одного раза.

0 голосов
/ 04 мая 2018

Вам нужно проверить ноль, тогда он даст вам желаемый результат. Ниже запрос был протестирован на MSSQL.

Какую базу данных вы используете? Если вы понимаете это, измените его так, чтобы оно работало на вашем сервере, иначе сообщите нам.

Я пытался преобразовать запрос в MySQL, проверьте.

SELECT `Crime ID` ,COUNT(NULLIF(`Crime ID`,'')) FROM crimedata GROUP BY `Crime ID` HAVING COUNT(NULLIF(`Crime ID`,''))  > 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...