MySQL: сопоставить запись в таблице2 с записями в таблице1 с помощью идентификатора, а затем вставить совпадения в качестве нового столбца в таблицу2 - PullRequest
0 голосов
/ 05 марта 2020

Предположим, у меня есть два набора данных студентов. Я хочу сопоставить студентов в одном наборе данных с другим. Критерии соответствия: совпадают ли первые 4 буквы имени, последние 4 буквы фамилии и первые 4 буквы первого слова в старшей школе. Если все это правда, мы предполагаем, что студенты одинаковы.

Я могу выполнить sh, используя

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) 

Это довольно медленно, поэтому мне также любопытно, есть ли лучший способ, но он работает как задумано.

Теперь мой вопрос: как мне go вставить вставленные в таблицу идентификаторы 'uid' в качестве нового столбца в table2? То есть, если есть ученик, который был сопоставлен со студентом в таблице 1, то уникальный столбец этого ученика в таблице 1 будет в столбце «совпадение». Для студентов, которые не соответствуют, «матч» будет просто нулевым.

Если строка в таблице2 соответствует нескольким учащимся в таблице1, допустим, мы повторяем строку в таблице2, за исключением случаев, когда для слова «совпадение» используются разные значения.

Есть ли прямой способ чтобы выполнить 1015 * это? Я очень новичок в MySQL и не знаю, как поступить

1 Ответ

0 голосов
/ 05 марта 2020

Не думаю, что для этого нужны регулярные выражения:

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`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...