Подтвердить что ты не робот

SQL Server: IF EXISTS; ELSE

У меня есть таблица А:

ID value
 1  100
 2  101
 2  444
 3  501

Также TableB

ID Code
1
2

Теперь я хочу заполнить col = код таблицы B, если в таблице A есть ID = 2. для нескольких значений, получите максимальное значение. иначе заполните его цифрой "123". Теперь вот что я использовал:

if exists (select MAX(value) from #A where id = 2)
 BEGIN
 update #B
 set code = (select MAX(value) from #A where id = 2)
 from #A
 END

 ELSE 

 update #B
 set code = 123
 from #B

Я уверен, что есть некоторая проблема в BEGIN: END или IF EXIST; ELSE. В принципе, я хочу обходить часть else, если в выражении IF есть часть выбора и наоборот. Например, если select statement IF = part:

(select MAX(value) from #A where id = 4)

Он должен просто заполнить 123, coz ID = 4 не существует! Пожалуйста, воспитывайте! Спасибо в Advance

4b9b3361

Ответ 1

EDIT

Я хочу добавить причину, по которой ваш оператор IF, похоже, не работает. Когда вы выполняете EXISTS в агрегате, он всегда будет true. Он возвращает значение, даже если ID не существует. Конечно, это NULL, но его возвращение. Вместо этого сделайте следующее:

if exists(select 1 from table where id = 4)

и вы попадете в ELSE часть вашего оператора IF.


Теперь, здесь лучшее, основанное на наборе решение:

update b
  set code = isnull(a.value, 123)
from #b b
left join (select id, max(value) from #a group by id) a
  on b.id = a.id
where
  b.id = yourid

Это дает возможность работать на всей таблице, а не на отдельных идентификаторах.

Ответ 2

Попробуйте следующее:

Update TableB Set
  Code = Coalesce(
    (Select Max(Value)
    From TableA 
    Where Id = b.Id), 123)
From TableB b