在MySQL表中查找重复的行

问题描述 投票:0回答:1

我有一个表格,其中我将项目链接到类型,其中每种类型可以有多个类别。对于每种类型和类别的组合,只应链接一个项目。然而,通过我过去的一些错误,一些重复的东西已经滑落。我现在正在尝试编写一个可以给我重复的查询,但是我做得不好或者我不会在这里发帖。

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

这是我试过的。它确实有效,并为我提供了链接到不同项目的type_ids。但是每个type_id应该只链接到一个项目。此列表不会显示链接的项目。这就是我想知道的事情。

有人可以帮我吗?

Update

以下是数据样本。如您所见,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
1个回答
2
投票

您需要将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值,而不能查找其他列值。

© www.soinside.com 2019 - 2024. All rights reserved.