Поиск повторяющихся строк в таблице MySQL

У меня есть таблица, в которой я связываю элементы с типами, где каждый тип может иметь несколько категорий. Для каждой комбинации типа и категории должен быть связан только один элемент. Однако из-за какой-то моей прошлой ошибки проскочили некоторые дубликаты. Сейчас я пытаюсь написать запрос, который даст мне дубликаты, но я не очень хорошо работаю, иначе я бы явно не публиковал здесь сообщения.

SELECT
    item_id,
    type_id,
    category
FROM itemTypes
WHERE category = 'cat1'
GROUP BY type_id
HAVING COUNT(*) >= 2;

Это то, что я пробовал. Он действительно работает и дает мне type_ids, которые связаны с разными элементами. Но каждый type_id должен быть связан только с одним элементом. В этом списке не отображаются связанные элементы. И это как раз то, что я хотел бы знать.

Кто-нибудь может мне помочь?

Обновлять

Ниже представлен образец данных. Как видите, type_id 5 и 6 связаны несколько раз. В результате я бы хотел получить только эти записи.

| id    | item_id   | type_id   |   cat     |
+-------+-----------+-----------+-----------+
| 1     | 100       | 5         | cat1      |
| 2     | 110       | 5         | cat1      |
| 3     | 115       | 6         | cat1      |
| 4     | 120       | 7         | cat1      |
| 5     | 125       | 5         | cat1      |
| 6     | 130       | 6         | cat1      |
| 7     | 135       | 4         | cat1      |
| 8     | 140       | 8         | cat1      |

обновите свой вопрос и добавьте правильный образец данных

scaisEdge 17.05.2018 15:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
19
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо присоединить вашу таблицу itemTypes к текущему запросу, перефразированному как подзапрос:

SELECT t1.*
FROM itemTypes t1
INNER JOIN
(
    SELECT item_id
    FROM itemTypes
    WHERE category = 'cat1'
    GROUP BY item_id
    HAVING COUNT(*) > 1
) t2
    ON t1.item_id = t2.item_id;

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

Это именно то, что я искал. Ты спасатель. Благодарю.

Peter 17.05.2018 15:28

Другие вопросы по теме