MYSQL:列出表中所有出现的重复项

Posted

技术标签:

【中文标题】MYSQL:列出表中所有出现的重复项【英文标题】:MYSQL : list all occurrences of duplicates in a table 【发布时间】:2021-05-25 01:11:33 【问题描述】:

我想在一个表中列出所有出现的重复项并按它们的 id 重新组合它们。

这是我的桌子:

+------------+----+
| name       | id |
+------------+----+
| Produit 78 |  5 |
| Produit 78 |  6 |
| Produit 78 | 11 |
| Produit 69 | 12 |
| Produit 12 | 14 |
| Produit 12 | 15 |
| Produit 92 | 22 |
| Produit 92 | 25 |

我试过了:

select name, id from commande_ligne group by name having count(name) > 1;

但它只列出了第一次出现的重复项。

而我想要这样的东西:

+------------+-------+
| name       | id    |
+------------+-------+
| Produit 78 | 5,6,11|
| Produit 12 | 14,15 |
| Produit 92 | 22,25 |

【问题讨论】:

【参考方案1】:

如果你想要所有重复项中id 的值,你可以这样做:

select name, GROUP_CONCAT(id) 
from commande_ligne 
group by name having count(name) > 1;

阅读更多关于GROUP_CONCAT() function的信息。

【讨论】:

【参考方案2】:

使用名称为带有 Id 的 Product 78 提供的数据样本,无法获得您要查找的结果,因为在唯一 ID 下始终有一个具有唯一 ID 的产品 78,因此不能按 ID 分组,但是,您可以按名称对不同 ID 分组,按产品 78 的名称分组记录,它将显示按字段名称分组时的 ID 5、6、11

【讨论】:

我如何按名称对它们进行分组,以便按名称分组记录的不同 id 【参考方案3】:

分组 SQL 语句将是

    select id, name from commande_ligne group by name order by name 

结果应该显示 产品 78 ID 5 6 11 产品 12 ID 14 15 这就是你会得到的结果

【讨论】:

【参考方案4】:

我认为你应该把名字和数字分成不同的属性:

name | number | id

SQL 查询应该是这样的:

select ... 
group by name, number;

取决于你想做什么。

是这样的吗?

【讨论】:

我想要一列列出相关名称的 id。 类似于数据透视表,其中产品名称是列名,而不是 [NAME]?这就是你要找的东西

以上是关于MYSQL:列出表中所有出现的重复项的主要内容,如果未能解决你的问题,请参考以下文章

mysql语句怎么去掉表中某列的重复项?

使用 SQL 列出表中的所有列 [重复]

删除一张表中重复数据并保留一条ID最小的记录

如何列出 hbase 表中的所有行键?

SQL的一些查询语句

怎么样删除excel表中的所有重复的数据,不保留初始数据