Ответ 1
Сделайте это:
update Table1
set Description = t2.Description
from Table1 t1
inner join Table2 t2
on t1.DescriptionID = t2.ID
У меня есть две таблицы в среде SQL Server 2008 со следующей структурой
Table1
- ID
- DescriptionID
- Description
Table2
- ID
- Description
Table1.DescriptionID сопоставляется с Table2.ID. Однако мне это больше не нужно. Я хотел бы сделать массовое обновление, чтобы установить свойство Description из таблицы 1 в значение, связанное с ним в таблице2. Другими словами, я хочу сделать что-то вроде этого:
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
Однако я не уверен, что это подходящий подход. Может ли кто-нибудь показать мне, как это сделать?
Сделайте это:
update Table1
set Description = t2.Description
from Table1 t1
inner join Table2 t2
on t1.DescriptionID = t2.ID
Ваш подход в порядке
Может быть, немного яснее (для меня все равно!)
UPDATE
T1
SET
[Description] = t2.[Description]
FROM
Table1 T1
JOIN
[Table2] t2 ON t2.[ID] = t1.DescriptionID
И этот, и ваш запрос должны работать одинаково, потому что это один и тот же запрос, просто положенный иначе.
Вы можете сделать это с помощью регулярного UPDATE
с JOIN
UPDATE T1
SET Description = T2.Description
FROM Table1 T1
JOIN Table2 T2
ON T2.ID = T1.DescriptionId
Или вы можете просто обновить, не используя join, как это:
Update t1 set t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
SQL, который вы разместили в своем вопросе, является одним из способов сделать это. У большинства вещей в SQL есть несколько способов сделать это.
UPDATE
[Table1]
SET
[Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
Если вы планируете запустить его на базе данных PROD, лучше сначала создать его снимок или зеркало и протестировать его. Убедитесь, что данные заканчиваются, как вы ожидаете для пары записей. И если вы удовлетворены, запустите его на реальной БД.