У меня есть таблица, в которой я связываю элементы с типами, где каждый тип может иметь несколько категорий. Для каждой комбинации типа и категории нужно связать только один элемент. Однако, через некоторую прошлую мою ошибку, некоторые дубликаты проскользнули. Теперь я пытаюсь написать запрос, который даст мне дубликаты, но я не делаю отличную работу, или я бы не стал публиковать здесь, очевидно.
SELECT
item_id,
type_id,
category
FROM itemTypes
WHERE category = 'cat1'
GROUP BY type_id
HAVING COUNT(*) >= 2;
Это то, что я пробовал. Он работает и дает мне type_ids, которые связаны с разными элементами. Но каждый тип_ид должен быть связан только с одним элементом. Этот список не показывает мне элементы, которые связаны. И это именно то, что я хотел бы знать.
Кто-нибудь может мне помочь?
Ниже приведен образец данных. Как вы видите, 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 |
Вам нужно присоединиться к вашей таблице 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
значения item_id
соответствующие вашим критериям, но не другие значения столбца.