在MySQL表中查找重复的行

时间:2018-05-17 13:08:41

标签: 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      |

1 个答案:

答案 0 :(得分: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值,而不能查找其他列值。