【问题标题】:MYSQL : list all occurrences of duplicates in a tableMYSQL:列出表中所有出现的重复项
【发布时间】: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 |

【问题讨论】:

    标签: mysql duplicates group-concat


    【解决方案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]?这就是你要找的东西
        猜你喜欢
        • 2013-01-04
        • 2017-05-29
        • 2012-08-06
        • 2014-08-22
        • 2021-06-21
        • 2014-06-28
        • 2013-12-16
        • 2019-11-13
        • 2014-08-03
        相关资源
        最近更新 更多