首页 > 解决方案 > 在 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      |

标签: mysql

解决方案


您需要将您的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符合您条件的值,而不能找到其他列值。


推荐阅读