Найти дубликаты записей в MySQL 2 - PullRequest
0 голосов
/ 02 февраля 2012

Все ребята, вероятно, порекомендуют мне прочитать следующий вопрос в этом URL http://senta.la/bd08

Так что я просто внимательно их читаю и все еще со своей проблемой. Эта ситуация не равна вопросу, упомянутому в ссылке выше.

См. Ниже записи, которые я хочу найти (помеченные *):

ID         COURSE       OTHERCOLUMN_X      OTHERCOLUMN_Y       OTHERCOLUMN_Z
123        2111         ...                ...                 ...
*5644      2245         ...                ...                 ...
*5644      2245         ...                ...                 ...
2121       2131         ...                ...                 ...

Ранее программист, не задумываясь, использует индекс UNIQUE, чтобы создать ключ компоста для предотвращения этой ситуации. Я знаю ... хорошая новость в том, что программист больше не программист.

Этот классический запрос не дает желаемого результата ...

SELECT id, course FROM mytable
GROUP BY id 
HAVING COUNT(id) > 1

Я хочу видеть только этот результат:

ID         COURSE       OTHERCOLUMN_X      OTHERCOLUMN_Y       OTHERCOLUMN_Z
*5644      2245         ...                ...                 ...
*5644      2245         ...                ...                 ...

Я только что попробовал много запросов, но я могу найти тот, который покажет мне результаты выше.

(

Ответы [ 4 ]

1 голос
/ 02 февраля 2012

Чтобы найти строки с дубликатами id:

SELECT a.*
FROM mytable AS a
  JOIN
    ( SELECT id 
      FROM mytable
      GROUP BY id 
      HAVING COUNT(*) > 1
    ) AS b
    ON b.id = a.id

Чтобы найти строки с дубликатами (id, course):

SELECT a.*
FROM mytable AS a
  JOIN
    ( SELECT id, course 
      FROM mytable
      GROUP BY id, course 
      HAVING COUNT(*) > 1
    ) AS b
    ON  b.id = a.id
    AND b.course = a.course
1 голос
/ 02 февраля 2012

Хорошо дано

SELECT id, course FROM mytable GROUP BY id  HAVING COUNT(id) > 1 

работает одним способом - присоединиться к исходной таблице

Что-то вроде

Select myTable.ID,myTable.Course,... From myTable
inner join(SELECT id, course FROM mytable GROUP BY id  HAVING COUNT(id) > 1) duplicates
On duplicates.id = mytable.id and duplicates.course = mytable.course

возможно

1 голос
/ 02 февраля 2012

попробуйте использовать следующее:

SELECT id, 
COUNT(id) AS NumOccurrences
FROM YourTableName
GROUP BY id
HAVING ( COUNT(id) > 1 )
0 голосов
/ 02 февраля 2012

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

SELECT id, course 
FROM mytable
WHERE id in (SELECT id from mytable GROUP BY id HAVING COUNT(id) > 1)
...