Я всегда оказываюсь в одном и том же положении: у меня есть таблица с двумя или более столбцами. Мне нужно заполнить один из этих столбцов на основе другого. Однако нужные мне данные находятся в отдельной таблице.

Вот пример такого сценария. Скажем, у нас есть две таблицы по два столбца в каждой.

Каждая запись в таблице people имеет id и name. Каждая запись в таблице scores имеет personId, который связан с people.id и score.

Если бы мы хотели получить данные, содержащие names рядом с scores, мы могли бы легко сделать это с помощью 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