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
符合您条件的值,而不能找到其他列值。
推荐阅读
- node.js - 与远程服务器的 TLS 身份验证
- bash - 计算一行的重复列,打印所有行及其计数
- c# - 输入字符串不正确 fromat:TimeSpan DisplayFormat
- regex - 缺少元素的正则表达式匹配排列
- c++ - 在 C++ 中是什么意思“它不拥有底层数据,因此复制或分配很便宜”
- ios - 尝试使用 React Native 广播 iBeacon
- python - 在附加时保留数据框列顺序
- pyspark - 插入缺失的日期行并在新行中插入旧值 PySpark
- swift - 如何让计时器跑得快于 1 秒
- c - 是否可以使用泛型函数将数组复制到 c 中另一个数组的不同类型