2015-03-18 4 views
0

У меня есть три таблицы:граф дубликатов в таблице связующого

contacts 
brands 
contact_brands  // linking table 

Для целей моего вопроса, то мы будем иметь дело только с UID столбцов в этом (contact_id и brand_id).

contact_brands представляет собой таблицу, сшивание, содержащий пары contact_id и brand_id, и мне нужно найти все дубликаты спариваний в ней (т.е. contact_id S, которые имеют один и тот же brand_id назначенную более одного раза).

Я почти уверен, что мне нужен нулевой запрос SELECT * FROM (SELECT * FROM...) AS..., и почти наверняка COUNT() тоже есть, но мои знания приближаются.

ответ

1

Вы можете получить дубликаты только с помощью group by:

select contact_id, brand_id, count(*) as cnt 
from contact_brands 
group by contact_id, brand_id 
having cnt > 1; 

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

Если ваша таблица ссылок содержит только эти два столбца, тогда у вас есть проблема с дубликатами. Это было бы решено с использованием auto-incremented id, который вы можете добавить, если хотите. В противном случае у вас должно быть уникальное ограничение или индекс на contact_brands(contact_id, brand_id) для предотвращения дублирования.

+0

Это отлично, спасибо. Оказалось, что это намного проще, чем я ожидал. – mpdc

Смежные вопросы