Найти дубликаты в одной таблице в MySQL

У меня есть таблица с двумя столбцами - artist, release_id

Какой запрос я могу запустить для отображения повторяющихся записей?

например. моя таблица

ArtistX : 45677
ArtistY : 378798
ArtistX : 45677
ArtistZ : 123456
ArtistY : 888888
ArtistX : 2312
ArtistY: 378798

Запрос должен показывать

ArtistX : 45677
ArtistX : 45677
ArtistY : 378798
ArtistY : 378798

Ответ 1

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

SELECT
    artist, release_id, count(*) no_of_records
FROM table
GROUP BY artist, release_id
HAVING count(*) > 1;

Ответ 2

SELECT id,artist,COUNT(*) FROM myTable
GROUP BY artist, release_id HAVING COUNT(*) > 1

Ответ 3

вы можете попробовать что-то вроде этого

select artist, count(*) from mytable group by artist having count(*) > 1;

который выводит

artist   count(*)
45677    2
378798   2

Ответ 4

SELECT row, COUNT(row) AS num FROM mytable GROUP BY row HAVING (num > 1);

Ответ 5

SELECT   artist, release_id, count (*) no_of_records, group_concat (id) FROM table GROUP BY artist, release_id HAVING count (*) > 1;

также добавление group_concat (id) возвращает вам все идентификаторы дубликатов.

Ответ 6

вы можете использовать этот запрос для того же результата. он работает для меня

SELECT имя первого, последнего, list.address FROM list INNER JOIN (SELECT адрес FROM list GROUP BY address HAVING count (id) > 1) dup ON list.address = dup.address

Ответ 7

выберите * из таблицы, где artist IN (выберите исполнителя из группы таблицы художником, имеющим счетчик (ID) > 1) и release_id IN (выберите release_ид из таблицы group by release_id с count (release_id) > 1);

Выберет: ИсполнительX: 45677 ИсполнительX: 45677 Артикул: 378798 Артикул: 378798

Ответ 8

SELECT id,artist,COUNT(id) as found FROM table GROUP by id HAVING found > 1

Ответ 9

SELECT artist, count(*) 
FROM tableName 
GROUP BY artist 
HAVING count(*) > 1;

Ответ 10

Попробуйте следующее:

SELECT A.ARTIST,A.RELEASE_ID FROM ARTISTS A
WHERE EXISTS(
SELECT 'X' FROM ARTISTS B
WHERE B.ARTIST = A.ARTIST AND B.RELEASE_ID = A.RELEASE_ID
GROUP BY B.ARTIST,B.RELEASE_ID
HAVING COUNT(B.ARTIST)>1)
ORDER BY A.ARTIST;

Ответ 11

Этот метод может быть неудобным для вас, но если вы когда-либо захотите избавиться от дубликатов и сделать это, убедившись, что они дубликаты, вы можете попробовать следующее:

  • дублируйте table1 в table2, например, следующим образом:

    CREATE TABLE table2 AS SELECT * FROM table1;

  • добавить новый столбец в table1, например name it kount

  • запустите запрос (это предполагает, что release_id должен иметь уникальный столбец):

    UPDATE table1 AS t1 SET t1.kount = (SELECT COUNT (*) FROM table2 AS t2 WHERE t1.release_id = t2.release_id)

  • drop table table2

  • используйте table1.kount, чтобы найти дубликаты и удалить их или что-то еще. Предпочтительно в PHP/Python/Perl. Таким образом, вы можете, например, убедиться, что они действительно дубликаты и имеют один и тот же release_диск. Один и тот же release_ID может быть присвоен случайно, а названия, годы публикации и т.д. Могут отличаться. Поэтому просто поместите свой код для фильтрации дубликатов (псевдокод):

    foreach (sql (SELECT * FROM table1 WHERE kount > 1)) do // делаем что-то

Ответ 12

Если у вас более уникальный столбец в одной строке, вы можете использовать это:

DELETE FROM table WHERE id in(
    SELECT x.id 
    FROM ( 
        SELECT *,count(id) cc FROM table group by col1,col2,col3... 
    ) x
    WHERE x.cc>1
)