mysql - 查找 MySQL 表中的重复行

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

最佳答案

您需要将 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/

相关文章:

mysql - 如何在不牺牲良好性能的情况下搜索 playframework JPA 实体?

javascript - 在 PHP 代码中单击链接 javascript 函数调用

MySQL 多对多表主键

mysql - 从 300 万行中随机选择

mysql - 无法在 flutter 应用程序中显示来自 MySQL 的数据

php - 如何创建一个主键按 DESC 排序的 MySQL 表,并在插入新行后保持这种状态?

mysql - 计算具有相同值的行数

php - sql/php 查询设置变量的值

php - 在 MySQL 中存储零件数据库可用年份的最佳方式

MySQL-聚合函数的滥用