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
Ответы
Ответ 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