Я всегда оказываюсь в одном и том же положении: у меня есть таблица с двумя или более столбцами. Мне нужно заполнить один из этих столбцов на основе другого. Однако нужные мне данные находятся в отдельной таблице.
Вот пример такого сценария. Скажем, у нас есть две таблицы по два столбца в каждой.
Каждая запись в таблице people
имеет id
и name
. Каждая запись в таблице scores
имеет personId
, который связан с people.id
и score
.
Если бы мы хотели получить данные, содержащие name
s рядом с score
s, мы могли бы легко сделать это с помощью JOIN
:
SELECT p.name, s.score FROM people p JOIN scores s ON p.id = s.personId
Но что происходит, когда наш проект требует изменений: теперь имена должны храниться в scores
таблице. После добавления нового столбца, как нам вставить данные?
Нам нужно обновить одну таблицу на основе другой. Это можно решить, используя UPDATE
с JOIN
.
MSSQL
UPDATE scores SET scores.name = p.name FROM scores s INNER JOIN people p ON s.personId = p.id
MySQL
UPDATE scores s,
people p
SET scores.name = people.name
WHERE s.personId = p.id
И наша scores
таблица завершена!
Приведенные выше команды работают для этого конкретного сценария. Более общие версии одной и той же команды см. Ниже.
Общий MSSQL
UPDATE targetTable SET targetTable.targetColumn = s.sourceColumn FROM targetTable t INNER JOIN sourceTable s ON t.matchingColumn = s.matchingColumn
Общий MySQL
UPDATE targetTable t,
sourceTable s
SET targetTable.targetColumn = sourceTable.sourceColumn
WHERE t.matchingColumn = s.matchingColumn