有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?
Posted
技术标签:
【中文标题】有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?【英文标题】:Is There a Way to Combine Similar Rows in SQL Based on a Value That Isn't Exactly the Same? 【发布时间】:2022-01-09 10:06:10 【问题描述】:我有一个 SQL 表,您可以在其中添加品牌名称,当添加新品牌名称时,它会增加现有品牌活跃计数或创建新品牌名称。
问题是,如果有人添加了一个拼写不同的新品牌(例如添加了 Toyota,但拼写为 toyota),它会创建一个具有新活动计数和新品牌 ID 的新品牌。既然表中有几个这样的实例,有没有办法我可以用 SQL 进行排序并合并相似的品牌?我知道这最终会删除几行,我不确定 SQL 是否有能力一次性完成所有操作。
我对 SQL 还是比较陌生,因此我们非常感谢任何有关此方面的建议。我听说使用 Python Pandas 会更容易,所以我目前正在研究一种方法来做到这一点。
【问题讨论】:
处理这个问题的正常方法是在 UI 层:使添加新品牌变得更加困难(显示确认以确保)并且更容易与现有品牌匹配(自动完成,因此使用现有品牌少打字)。 和collation
应该是case insensitive
【参考方案1】:
如果是简单的大小写更改,您可以使用 LOWER() 之类的函数将它们全部转换为小写,然后根据品牌名称将结果组合在一起, 但是,您的问题是“相似”的记录,其中相似的定义不是很好。 SQL 语言希望您清楚地定义您需要什么。
如果您要修复一个/几个字符,您可以使用带有百分比 (%
) 和 /
或下划线 (_
) 符号的 LIKE operator。您可以通过在不同位置放置%
和_
来定义您想要识别的所有错误排列。或者,您也可以在 mysql 中探索 SOUNDEX function 或 sounds like,看看是否可以基于 SOUNDEX 合并品牌名称。
如果数据不是很大,我会建议你创建另一个表/临时表来执行这样的操作。这样,您始终可以参考原始数据。
【讨论】:
以上是关于有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?的主要内容,如果未能解决你的问题,请参考以下文章
如果相同的列值在多行中重复,则 UPDATE - SQL / MYSQL