首页 > 解决方案 > mysql模式匹配两个不同表中的前5个字符,然后将数据输入到单独的列中

问题描述

我很讨厌mysql命令,请帮忙。这是表格的样子。

table1
StudentID	AlternateName
15654654	William001
45245324	Smith002
45245245	Wilson003
23423232	Johnaton004
45345322	Robert005
88787164	Joshua006
45645442	Jessie007

table 2
RealName	ZipCode	AltName
Smith		66521	null
johnaton	55224	null
Robert		63118	null
william		53210	null
Jessie		88763	null
wilson		55754	null
Joshua		78301	null

我需要在 table2 中创建一个外键来链接到 table1。我有类似的数据,但不完全匹配。我需要在 table1 中取列 AlternateName 的前 5 个字符。如果前 5 个字符与表 2 中 RealName 列的任何前 5 个字符匹配(不考虑大小写*),则将 AlternataName 中的数据写入表 2 中调用 AltName 的列。

例如。table1 中的 William001 应与 table2 中的 william 匹配,William001 将被写入该行的 AltName。是的,我的主键是一个名字后跟一个数字。我知道这不是应该的,但这是我需要做的。

我怎样才能使用mysql做到这一点?谢谢。

标签: mysqlsqlstringjoinsql-update

解决方案


您可以加入名称最左边的 5 个字符(不区分大小写)并更新匹配记录。

考虑:

update table2 t2
inner join table1 t1 
    on lower(left(t1.AlternateName, 5)) = lower(left(t2.RealName, 5))
set t2.AltName = t1.AlternateName

注意:如果有多个匹配记录,此策略可能不会表现一致......


推荐阅读