2013-07-26 4 views
0

Я пытаюсь обновить столбец таблицы A со значениями в столбце таблицы B на основе if Table A.col1 = TableB.Col1.Обновление значения SQL Server из другой таблицы, если не null

Проблема: Я переписываю значение столбца TableA с Null, если Col1 не найден в TableB.Col1.

Мой текущий запрос

UPDATE [tableA] 
SET col2 = (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1) 

Как можно избежать этого?

Ex: TableA

Col1 Col2 
1 100 
2 200 
3 300 

TableB

Col1 Col2 
1 1000 
3 3000 

Результирующая таблица должна быть:

Таблица A

Col1 Col2 
1 1000 
2 200 
3 3000 

Но я получаю:

Col1 Col 2 
1 1000 
2 null 
3 3000 

Любые идеи?

ответ

1

Вы можете сделать:

UPDATE [tableA] 
SET col2 = COALESCE(
      (SELECT col2 FROM [tableB] WHERE [TableB].col1 = [TableA].col1), 
      col2) 

COALESCE возвращает первое ненулевое выражение среди своих аргументов.

Или вы могли бы сделать:

UPDATE a 
SET col2 = b.col2 
FROM TableA a 
    INNER JOIN 
    TableB b 
     ON 
      a.col1 = b.col1 

, но вы должны знать, что эта вторая форма диалекта SQL-сервера, а не стандарт SQL.

+0

фантастический, спасибо за ответ, использовал 1-й, он работал с удовольствием. – Fearghal

0

Это должно сделать это, нет?

UPDATE [tableA] 
SET col2= (select col2 from [tableB] where [TableB].col1=[TableA].col1 and [TableB].col1 IS NOT NULL) 
+0

Нет, что, похоже, не работает. Все значения, не приведенные в таблице B, теперь являются нулевыми в таблице A. Испытывали ли вы ее на своей стороне? – Fearghal

1

Вы не хотите, чтобы обновить всю таблицу, чтобы ваш запрос нужен пункт where. В этом случае:

WHERE exists (select 1 
       from [tableB] 
       where [TableB].col1=[TableA].col1 
        and [TableB].col2 is not NULL -- that condition may or may not be needed 
      ) 
Смежные вопросы