MySQL:使用id将表2中的条目与表1中的条目进行匹配,然后将匹配项作为新列插入表2中

MySQL:使用id将表2中的条目与表1中的条目进行匹配,然后将匹配项作为新列插入表2中,mysql,sql,database,merge,Mysql,Sql,Database,Merge,假设我有两个学生数据集。我想将一个数据集中的学生与另一个数据集中的学生进行匹配。匹配标准是高中名字的前4个字母、后4个字母和第一个单词的前4个字母是否匹配。如果这些都是真的,我们假设学生是一样的 我能够使用 SELECT t1.`Full Name`, t1.`uid_hist`, t2.`fullname`, t2.`hsname`, t1.`High School` FROM table1 t1 LEFT JOIN table2 t2 on SUBSTRING(REGEXP_SUBSTR(L

假设我有两个学生数据集。我想将一个数据集中的学生与另一个数据集中的学生进行匹配。匹配标准是高中名字的前4个字母、后4个字母和第一个单词的前4个字母是否匹配。如果这些都是真的,我们假设学生是一样的

我能够使用

SELECT t1.`Full Name`, t1.`uid_hist`, t2.`fullname`, t2.`hsname`, t1.`High School`
FROM table1 t1
LEFT JOIN table2 t2
on SUBSTRING(REGEXP_SUBSTR(LOWER(t2.fullname), '^[a-z]*?[^a-z]'), 1, 4) = SUBSTRING(REGEXP_SUBSTR(LOWER(t1.`Full Name`), '^[a-z]*?[^A-z]'), 1, 4)
and SUBSTRING(REGEXP_SUBSTR(LOWER(t2.fullname), '[^a-z][a-z]*?$'), -4) = SUBSTRING(REGEXP_SUBSTR(LOWER(t1.`Full Name`), '[^a-z][a-z]*?$'), -4)
and SUBSTRING(REGEXP_SUBSTR(LOWER(t2.hsname), '^[a-z]*?[^a-z]'), 1, 4) = SUBSTRING(REGEXP_SUBSTR(LOWER(t1.`High School`), '^[a-z]*?[^a-z]'), 1, 4) 
这是相当缓慢的,所以我也很好奇是否有更好的方法,但它似乎工作的预期

现在,我的问题是,如何将表1中匹配的uid作为新列插入表2中?也就是说,如果有一个学生与表1中的学生匹配,那么表1中该学生的唯一标识符将在“匹配”列中。对于不匹配的学生,“match”将仅为空

如果表2中的一行与表1中的多个学生匹配,那么假设我们重复表2中的行,除了“匹配”的值不同


有什么简单的方法可以做到这一点吗?我对MySQL非常陌生,不知道如何继续

我认为您不需要正则表达式:

SELECT t1.`Full Name`, t1.`uid_hist`, t2.`fullname`, t2.`hsname`, t1.`High School`
FROM table1 t1 LEFT JOIN
     table2 t2
     ON LEFT(t2.fullname, 4) = LEFT(LOWER(t1.`Full Name`) AND
        RIGHT(t2.fullname, 4) = RIGHT(LOWER(t1.`Full Name`) AND
        LEFT(t2.`High School`, 4) = LEFT(LOWER(t1.`High School`)

你们如何从全名列的名字中确定姓氏?哦,对了。我误解了这个问题。Gordon Linoff有答案。
[A-z]
应该是
[A-z]
。哦,是的,好的捕获-会解决的@杰克森5。请提供示例数据和所需结果。regexp似乎旨在将其拆分为名和姓。
[^A-z]
旨在使regexp停止在名称之间的分隔符处。当然,它应该是
[^a-z]
。这里唯一的问题是,如果一些学生的姓氏只有2/3个字母长,那么我们只想让姓氏匹配,而不需要抓住一点名字