mysql - 当名称略有不同时按名称合并 mysql 行

标签 mysql merge rows

我正在尝试使用以下代码合并 MySQL 中的行:

SELECT
    type,
    name,
    GROUP_CONCAT(code SEPARATOR ',') AS code
FROM
    `table1`
WHERE
    name = '%name%' AND type = 'type'
GROUP BY
    name

但是第一个问题是数据库条目没有发生变化。

数据库看起来像这样:

type | name  | code
-----|-------|-------
 A   | Milk2 | 143521
-----|-------|-------
 A   | Milk3 | 987564
-----|-------|-------
 B   | Oil   | 656435
-----|-------|-------

我想让它看起来像:

type | name  | code
-----|-------|---------------
 A   | Milk  | 143521, 987564
-----|-------|---------------
 B   | Oil   | 656435
-----|-------|---------------

如您所见,名称可能略有不同,所以这是另一个问题。 我想知道当名称的前四个字母匹配时是否有任何方法可以合并行?

提前致谢。

最佳答案

MySQL 有几个 string functions这可能有帮助。有 LEFT(name, 4),您可能还想看看 SOUNDEX(name),它实现了 Soundex algorithm散列听起来相似的单词。例如:

 select soundex('smith'), soundex('smythe')

+ --------------------- + ---------------------- +
| soundex('smith')      | soundex('smythe')      |
+ --------------------- + ---------------------- +
| S530                  | S530                   |
+ --------------------- + ---------------------- +
1 rows

或者,使用您问题中的示例:

select soundex('milk2'), soundex('milk3')

+ --------------------- + --------------------- +
| soundex('milk2')      | soundex('milk3')      |
+ --------------------- + --------------------- +
| M420                  | M420                  |
+ --------------------- + --------------------- +
1 rows

您的查询看起来像这样:

SELECT
    type,
    GROUP_CONCAT(DISTINCT(name) SEPARATOR ',') AS name,  // note that since you've grouped on SOUNDEX(name) you can't just select name (MySQL may let you but will choose the first one
    GROUP_CONCAT(code SEPARATOR ',') AS code
FROM
    `table1`
WHERE
    name LIKE '%name%' AND type = 'type'
GROUP BY
    type, SOUNDEX(name)

希望对您有所帮助!

关于mysql - 当名称略有不同时按名称合并 mysql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28841515/

相关文章:

MySQL - 如果行重复,则仅返回第一个

php - 我的 php 表单没有传递数据,因为我已经实现了自动建议

javascript - jQuery - 内联编辑表格行

python - 删除包含特定值的行并删除奇数列

python - Pandas合并表: only distinct Ids from second table

excel - 如何使用 VBSCript 在 Excel 中查找合并单元格的开始行和结束行?

git - 如何 merge 子模块并始终保持 "ours"?

php - 将 BLOB 插入 Oracle 时出错

MySQL 求和所选行

mysql - 用于 AspNetCore MySql 连接的 MiniProfiler