我有两张table;包含玩家信息的一个,其中包含一个schoolname列。另一个包含学校信息的列包含学校(官方学校名称)和昵称(学校名称)。
我想更新players表,以便每个player都有一个schoolname列,它使用schools表中的官方学校名称,还有一个昵称列,它使用schools表中的昵称。
问题是players表包含的学校有时与schools.school匹配,有时与schools.nickname匹配,有时与两者都匹配,因为拼写/措辞不同。
例如,对于玩家中的玩家,学校名称为“millersville”,这与学校中的行相匹配,学校的官方名称和昵称为“millersville university of pennsylvania”和“Maraders”。
对于不同的一排玩家,学校名称是“亚利桑那”,它可以匹配“亚利桑那州立大学”,昵称“亚利桑那州立大学”或“亚利桑那大学”,昵称“亚利桑那州”。
我提出了这个查询,它最准确地匹配了两个表中的学校名称,但现在我不知道如何用正确的学校名称更新players表。
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语句的想法,但我不知道如何正确地执行它,也不知道连接什么,因为没有与每一行匹配的清晰列。
UPDATE players
INNER JOIN schools ON (SELECT ....)
SET SchoolName = schools.School
SchoolNickname = schools.Nickname;
2条答案
按热度按时间1mrurvl11#
这就是你想要的吗?
3ks5zfa02#
我还没有完全测试过,但应该是类似的。
简而言之,如果不确定是哪个字段,可以使用不同的联接两次联接到同一个表。然后可以使用coalesce来找出有效的连接。