У меня две таблицы; Один с информацией об игроках, который содержит столбец SchoolName. Другой с информацией о школах содержит столбцы Школа (официальное название школы) и Псевдоним (названия школы).
Я хочу обновить таблицу игроков таким образом, чтобы для каждого игрока был столбец SchoolName, в котором используется официальное название школы из таблицы школ, и столбец псевдонима, в котором используется псевдоним из школы.
Проблема в том, что таблица игроков содержит школы, которые иногда совпадают со школами. Школа, иногда со школами. Имя, иногда ни одно из-за различий в написании / формулировке.
Например, для для игроков, SchoolName - «Millersville», что соответствует строке в школах, где официальное имя и прозвище «Millersville University of Pennsylvania» и «Marauders».
Для другого ряда в игроках SchoolName - «Arizona», которое может совпадать с «Университетом штата Аризона» с прозвищем «Штат Аризона» или «Университетом Аризоны» с прозвищем «Аризона».
Я придумал этот запрос, который наиболее точно соответствует двум таблицам по названиям школ, но теперь я не уверен, как обновить таблицу игроков с правильными названиями школ.
SELECT Player
, SchoolName
, School
, Nickname
FROM schools
, players
WHERE players.SchoolName = schools.School
OR players.SchoolName = schools.Nickname
OR schools.School LIKE CONCAT('%', lower(trim(SchoolName)), '%')
AND lower(substring_index(trim(SchoolName), ' ', 1)) = lower(substring_index(trim(School), ' ', 1))
));
Это то, что я думал о преобразовании этого запроса в оператор обновления, но я не знаю, как это сделать правильно или к чему присоединиться, поскольку нет четкого столбца, который соответствует каждой строке.
UPDATE players
INNER JOIN schools ON (SELECT ....)
SET SchoolName = schools.School
SchoolNickname = schools.Nickname;