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:列出表中所有出现的重复项的主要内容,如果未能解决你的问题,请参考以下文章