【问题标题】:How to find duplicate rows with similar part of string如何查找具有相似字符串部分的重复行
【发布时间】:2014-09-04 00:42:51
【问题描述】:

我在一个表中有数千行。哪些行具有相似的关键字,但可以归类到同一组。例如:

Table : Birds_Name
    +-------+---------------------+
    |ID     |Name                 |
    +-------+---------------------+
    |1      |Blue Peckwood        |
    +-------+---------------------+
    |2      |North Peckwood       |
    +-------+---------------------+
    |3      |Northern Peckwood    |
    +-------+---------------------+
    |4      |Northern Peckwood    |
    +-------+---------------------+
    |5      |Red Heron            |
    +-------+---------------------+
    |6      |Red Heron            |
    +-------+---------------------+

至于上面的表格,应该有 2 组鸟。他们是PeckwookHeron

但是在我运行这个 mySQL 之后,我得到了:

SELECT *
FROM birds_name
WHERE name IN (
    SELECT name
    FROM birds_name
    GROUP BY name
    HAVING COUNT(*) > 1
)

在我运行查询之后。这就是我所拥有的:

    +-------+---------------------+
    |3      |Northern Peckwood    |
    +-------+---------------------+
    |4      |Northern Peckwood    |
    +-------+---------------------+
    |5      |Red Heron            |
    +-------+---------------------+
    |6      |Red Heron            |
    +-------+---------------------+

实际上,我希望选择任何共享相似字符串的行(在本例中为 Peckwood。所以它应该只有 2 个组 - Peckwood苍鹭

有可能吗?以及如何适配mysql代码来实现?

问候。

【问题讨论】:

  • Blue Peckwood 相比,North PeckwoodBlue Heron 的相似之处是什么?两者共享一个词...?

标签: mysql sql group-by duplicates


【解决方案1】:

试试这个

SELECT SUBSTRING_INDEX(name,' ',-1),count(*)
FROM birds_name
GROUP BY SUBSTRING_INDEX(name,' ',-1) HAVING count(*)>0;

Manual 用于 mysql 中的 SUBSTRING_INDEX 函数。

【讨论】:

    【解决方案2】:

    你能试试这个吗?

    SELECT count(id),name
      FROM birds_name
     group by name
    having count(id) >1
    

    谢谢

    SQL Fiddle

    【讨论】:

      【解决方案3】:

      我认为您可以使用MySQL String functions 将这些词分开,如下所示:

      mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
              -> 'www.mysql'
      mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
              -> 'mysql.com'
      

      然后,在查询的 GROUP BY 子句中使用它。

      更新:

      这是我的SQLFiddle

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 2017-12-20
        • 2016-03-07
        • 2018-06-15
        • 2011-06-23
        • 2015-10-07
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        相关资源
        最近更新 更多