Давайте детальніше розберемо цей запит. Нам потрібно виявити записи з однаковими id в таблиці table1, для цього потрібно зробити вибірку в таблиці table1 з умовою IN:
що буквально означає «вибрати всі з table1 де поле id одно діапазону значень». Останнє слово IN означає, що поле id має дорівнювати не просто певного значення, а відповідати декільком значенням, які вказуються в дужках після нього. У нашому випадку, в дужках після оператора IN вказано підзапит, який і повертає всі дублюються id.
Як було сказано раніше, цей запит повертає значення id, які повторюються більше одного разу. «Вибрати id з table1, згрупувати їх і вибрати ті, кількість яких після угруповання більше 1». Відбувається угруповання по полю id, і в ми якраз можемо підрахувати кількість «згрупувалися» id-шників, т. Е. Кількість однакових id. Так як угруповання відбувається по одному полю - id, то всі однакові значення id будуть згруповані в одне, тобто, наприклад, у нас є 3 айдішніка зі значенням «1», ще 4 айди зі значенням «2», тобто всього 7 айдішніков . В результаті 3 айдішніка згрупуються в один, а ще 4 айдішніка зі значенням «2» теж згрупуються в окремий запис, і в результаті після угруповання ми отримаємо два айдішніка замість 7-ми зі значеннями «1» і «2». За допомогою оператора having і функції count ми можемо порахувати кількість згрупованих id-шників, і якщо кількість згрупувалися id-шників більше 1, то ми враховуємо їх при вибірці (т. Е. Враховуємо їх в операторі IN), наприклад, з підзапиту ми дізналися, що id-дублікати - це 1 і 2. в основному запиті ми в результаті отримаємо:
Буває, що потрібно знайти записи, які повторюються не по одному, а по декількох полях. Припустимо у нас є таблиця info з полями name і surname (ім'я та прізвище), нам потрібно знайти записи з двома повторюваними полями (name і surname). Для цього нам допоможе оператор MySQL «CONCAT»: