Я хочу найти значения данного столбца, которые повторяются (дублируются), но возвращают повторы, только если другой столбец в строке такой же.
Возможно, пример будет более понятным. Имея таблицу с именем filters, у меня есть 3 столбца (id, name, filter_type):
DESCRIBE filters;
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| filter_type | varchar(255) | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+-------------------+--------------+------+-----+---------+----------------+
Теперь я хочу выбрать все повторяющиеся типы фильтра. Достаточно просто:
SELECT COUNT(*) as count, filter_type
FROM filters
GROUP BY filter_type_type HAVING count > 1;
+-------+-----------------+
| count | filter_type |
+-------+-----------------+
| 5 | Contact |
+-------+-----------------+
Но я хочу вернуть повтор только в том случае, если значения столбца имени одинаковы для всей группы. Таким образом, в результате выше, мы повторили «Контакт». Это повторяется 5 раз. Но я хочу вернуть этот результат, только если все 5 записей имеют одинаковое значение столбца имени.
SELECT name FROM filters WHERE filter_type = 'Contact';
+---------------------------+
| name |
+---------------------------+
| All |
| All |
| New |
| All |
| New |
+---------------------------+
Поскольку значения имен не совпадают для 5 записей, я не хочу возвращать тип фильтра «Контакт». Но если бы они все были одинаковыми, я бы хотел вернуть его.
Я думал использовать подзапросы, но не знал, как их соединить. Как я мог это сделать?