ОБНОВЛЕНИЕ таблицы из другой таблицы с оператором case - PullRequest
1 голос
/ 21 сентября 2010

У меня сейчас проблема.Мне нужно обновить таблицу A из таблицы B на основе этого условия:

  • Если одна запись в таблице A пуста (например, имя), то обновите эту запись из таблицы B

Вот мой сценарий на основе ошибок, который я подумал из своей головы.Это то, чего я хотел.

UPDATE TableA
   SET 
      NAME =
      (
         CASE WHEN TableA.NAME IS NULL THEN
            SELECT TableB.NAME
            FROM TableB
            WHERE TableB._ID = 1
      ),
      ADDRESS =
      (
         CASE WHEN TableA.ADDRESS IS NULL THEN
            SELECT TableB.ADDRESS
            FROM TableB
            WHERE TableB._ID = 1
      )
   WHERE TableA._ID = 1

Что-то в этом роде.Есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 сентября 2010

Вы можете объединить таблицы и использовать IsNull для возврата к Таблице B, когда TableA равен null:

update  a
set     name = IsNull(a.name, b.name)
,       address = IsNull(a.address, b.address)
from    TableA as a
inner join
        TableB as b
on      a._ID = b._ID
1 голос
/ 21 сентября 2010

Вам может быть проще использовать два утверждения ...

UPDATE TableA
    SET NAME = (SELECT NAME
                    FROM TableB
                    WHERE TableA.ID = TableB.ID)
    WHERE NAME IS NULL;

UPDATE TableA
    SET ADDRESS = (SELECT ADDRESS
                       FROM TableB
                       WHERE TableA.ID = TableB.ID)
    WHERE ADDRESS IS NULL;
1 голос
/ 21 сентября 2010

Попробуйте это -

update a
SET a.name = ( CASE WHEN a.name IS NULL THEN b.name ELSE a.name END ),
    a.address = ( CASE WHEN a.address IS NULL THEN b.address ELSE a.address END )
FROM tableA as a, tableB as b
where a.ID = b.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...