SQL Обновление с использованием результатов дела - PullRequest
0 голосов
/ 06 мая 2020

Мне нужно обновить значение в файле1 с содержимым поля в другом файле2 с совпадающим ключом, но только если в файле2 найдена соответствующая строка. В противном случае обновите поле file1 с помощью литерала Q. Это работает, но кажется лишним и занимает слишком много времени? Предложения?

update ZXU                                                 
set XUATTN =  case when (select count(*) from ZXK       
                         where XKUSER = 'TOMTEST') > 0 
                  then (select XKAUTH from ZXK         
                         where XKUSER = 'TOMTEST')     
                  else 'Q'                             
             end                                       
where XUUSER='TOMTEST'                                     

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете использовать COALESCE():

update ZXU
    set XUATTN = COALESCE( (select k.XKAUTH from ZXK k where k.XKUSER = ZHU.XUUSER), 'Q')
    where XUUSER = 'TOMTEST';

Замечу, что этот (и ваш код) вызовет ошибку, если подзапрос вернет более одной строки.

...