Обновить таблицу a из таблицы b, где (условия) - PullRequest
7 голосов
/ 29 января 2010

Вечер всех,

Собственно, это ночь.Около 11 вечера.Мой мозг отключается, и мне нужно немного помочь, чтобы я мог закончить и пойти домой:)

У меня есть две таблицы - таблица a и таблица b.Мне нужно обновить поле в таблице a значением из поля в таблице b, когда два других поля совпадают.Таблицы не имеют уникального идентификатора для каждой записи: (

По сути, я хочу сделать это:

update a
set importantField = 
(select b.importantfield
from b
where a.matchfield = b.matchfield
and a.matchfield2 = b.matchfield2
)
where a.matchfield = b.matchfield
and a.matchfield2 = b.matchfield2

Или, по крайней мере ... Я думаю, это то, что я хочуделать ...

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

13 голосов
/ 29 января 2010

Вы можете сделать это через объединение в обновлении:

Update a
Set a.importantField = b.importantField
From a Join b 
  On a.matchfield = b.matchfield
  And a.matchfield2 = b.matchfield2
3 голосов
/ 29 января 2010

Использование:

UPDATE TABLE_A
   SET importantField = (SELECT b.importantfield
                           FROM TABLE_B b
                          WHERE b.matchfield = matchfield
                            AND b.matchfield2 = matchfield2) 

SQL Server не поддерживает псевдонимы таблиц в обновляемой таблице, но выше приведен коррелированный запрос - эти поля без присоединенного псевдонима таблицы b будут обслуживать значения из TABLE_A, поскольку у него нет псевдонима .

Единственная проблема заключается в том, что существует несколько значений b.importantfield для записей с соответствующими записями в TABLE_A. Использование:

UPDATE TABLE_A
   SET importantField = (SELECT TOP 1 
                                b.importantfield
                           FROM TABLE_B b
                          WHERE b.matchfield = matchfield
                            AND b.matchfield2 = matchfield2) 

.. но вы также должны использовать ORDER BY, иначе вы получите любое случайное значение b.importantfield.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...