Ошибка при использовании «select case» для обновления таблицы.SQL-обновление с использованием оператора case case
Как нормальный выбор саз (не обновляется таблица) этот запрос работает отлично:
select case
when t1.id in (select t2.id from t2 where [condition1] then 'aaa'
when t1.id in (select t3.id from t3 where [condition2] then 'bbb'
when t1.id in (select t4.id from t4 where [condition3] then 'ccc'
else 'ddd'
end
from owner.t1;
Однако, когда я пытаюсь использовать один и то же «выбери случай» заявление в операторе обновления я получаю ошибку констатирует Подзапрос возвращает более 1 ряд. Это запрос на обновление, что не работает:
update owner.t1
set t1.var2 =
(select case
when t1.id in (select t2.id from t2 where [condition1] then 'aaa'
when t1.id in (select t3.id from t3 where [condition2] then 'bbb'
when t1.id in (select t4.id from t4 where [condition3] then 'ccc'
else 'ddd'
end
from owner.t1);
Когда я изменить код ниже, она работает, но на невероятно медленной скоростью. Возможно, слишком медленно для моей цели.
update owner.t1
set t1.var2 =
(select case
when t2.id in (select t2.id from t2 where [condition1] then 'aaa'
when t2.id in (select t3.id from t3 where [condition2] then 'bbb'
when t2.id in (select t4.id from t4 where [condition3] then 'ccc'
else 'ddd'
end
from owner.t2
where t2.id = t1.id);
Итак, мой вопрос в том, почему я должен ссылаться на свой идентификатор во вторичной таблице, а не на таблицу, которую я хочу обновить? И эта дополнительная проверка в выражении «где» добавляет много дополнительного времени на операцию?
Ваш первый запрос на обновление не должен вызывать эту ошибку, потому что вы используете 'IN'. Можете ли вы отправить оригинальный запрос –