2013-02-23 4 views
12

У меня есть таблица, которая содержит T1 три колонки: Id, Name, AddressSql Update Query

Существует еще одна таблица T2, которая содержит 2 колонки Id, New_Address. Id столбец T2 такой же, как и у T1.

Мне нужен запрос, который будет обновлять Address столбец T1 с New_Address из T2.

Я могу сделать это через цикл, проверив идентификатор и выполнив инструкцию обновления. Как это можно сделать с помощью запроса?

ответ

12

Как насчет

UPDATE T1 
SET Address = T2.New_Address 
FROM T2 
WHERE T1.id = T2.id 
7
UPDATE T1 
SET T1.Address = T2.New_Address 
FROM T1 
INNER JOIN T2 ON T2.ID = T1.ID 
2
UPDATE T1 
SET Address = (select New_Address from T2 where T1.ID=T2.ID); 
+2

Это - эквивалентно 'ЛЕВЫЙ JOIN' и - также обновит (установка их' NULL') все строки в Table1, которые не имеют 'NewAdress' в таблице2. –

+1

@ypercube - Одно из возможных преимуществ этого запроса состоит в том, что оно вызывает ошибку, если имеется более одного совпадающего нового адреса, вместо того, чтобы тихо выбирать неопределенный. Его можно было бы переписать как 'SET Address = ISNULL ((выберите New_Address из T2, где T1.ID = T2.ID), Address);' хотя MERGE также дает эту ошибку, встроенную в нее и будет предпочтительнее. –