Обновление массовой загрузки с помощью SQL

У меня есть две таблицы в среде 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)

Однако я не уверен, что это подходящий подход. Может ли кто-нибудь показать мне, как это сделать?

Ответы

Ответ 1

Сделайте это:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID

Ответ 2

Ваш подход в порядке

Может быть, немного яснее (для меня все равно!)

UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

И этот, и ваш запрос должны работать одинаково, потому что это один и тот же запрос, просто положенный иначе.

Ответ 3

Вы можете сделать это с помощью регулярного UPDATE с JOIN

UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId

Ответ 4

Или вы можете просто обновить, не используя join, как это:

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID

Ответ 5

SQL, который вы разместили в своем вопросе, является одним из способов сделать это. У большинства вещей в SQL есть несколько способов сделать это.

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

Если вы планируете запустить его на базе данных PROD, лучше сначала создать его снимок или зеркало и протестировать его. Убедитесь, что данные заканчиваются, как вы ожидаете для пары записей. И если вы удовлетворены, запустите его на реальной БД.