我有一个表,其中将项目链接到类型,其中每种类型可以有多个类别。对于类型和类别的每种组合,仅应链接一个项目。然而,由于我过去的一些错误,一些重复的内容被漏掉了。我现在正在尝试编写一个查询来提供重复项,但我做得不是很好,否则我显然不会在这里发帖。
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 |
最佳答案
您需要将 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
值,而不能找到其他列值。
关于mysql - 查找 MySQL 表中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50392290/