2014-10-30 1 views
0

У меня есть таблица, содержащая group_id, user_id и role_id.MySQL select duplicates

Поскольку уникальный ключ был установлен неправильно, есть пользователи, которые находятся в группе дважды, с разными ролями. Например:

group_id | user_id | role_id 
    1  |  1  |  1 
    1  |  1  |  2 
    2  |  1  |  1 
    1  |  2  |  1 
    2  |  2  |  3 

Как я могу найти идентификаторы пользователя пользователя, где это так? Итак, в этом примере только идентификатор пользователя 1?

Edit:

Поскольку ни ответа от @Manil Liyanage, ни один из @TX Тернер дать мне правильные результаты, может быть, я должен объяснить некоторые более;

Пользователи могут быть в нескольких группах, но они не должны находиться в какой-либо группе более одного раза. К сожалению, из-за неправильного уникального ключа некоторые пользователи сейчас находятся в одной группе более одного раза, но только с другой ролью. Как я могу найти пользователей, которые находятся в группе более одного раза?

+0

Если у них разные роли одной группы они дублируют или нет? – Mihai

ответ

2

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

SELECT user_id, group_id, COUNT(group_id) cnt 
FROM tablename 
GROUP BY user_id, group_id 
HAVING COUNT(group_id) > 1 
+0

Извините, это не дает мне точных результатов. См. Мое редактирование вопроса. – veelen

+0

Обновлен запрос на основе вашего разъяснения. Это покажет вам пользователей, которые находятся в одной группе более одного раза, и количество таких. –

+1

Логика правильная, но вам не нужен подзапрос для aply предложения where, используйте HAVING вместо этого (см. Мое предлагаемое редактирование) – Gervs

1

Следующее должно работать только хорошо для вас. Он показывает ida дублированных записей.

EDIT: Используйте ключи внутри оператора count-count, объединенного.

SELECT concat(concat('Group is: ',group_id) , 
concat(' user id : ' , user_id)) Places 
FROM table 
HAVING count(concat(group_id,concat (':',user_id))) > 1 
+0

Извините, это не дает мне нужных результатов. См. Мое редактирование вопроса. – veelen

+0

@veelen измените комбинацию клавиш внутри оператора having-count, чтобы указать дублированные ключи. Дайте мне знать результат, поскольку я написал его с мобильного. –

+0

Таким образом, я получаю тот же результат, что и раньше; только один результат с пользователем, который не в группе более одного раза. – veelen