#db2 #sql-scripts
#db2 #sql-скрипты
Вопрос:
Я хотел обновить столбец для нескольких строк на основе приведенного ниже условия — я хочу обновить столбец AUUSRTX файла abhipsha / AUDUSERF только для этих строк
WHERE AUDUSERF.AUUSRTP <> 'USR' and AUDUSERF.AUUSRTP <> 'usr'
и значение, которое необходимо обновить, должно поступать из usrprffil.uptext из usrprffil соответствующего идентификатора пользователя. Идентификаторы пользователей обеих таблиц следующие
usrprffil.upuprf = auduserf.auusrid
Может кто-нибудь, пожалуйста, помочь с правильным запросом для этого требования.
Я написал следующие 3 запроса, но получаю сообщение об ошибке: «Результат выбора более одной строки» для 1-го и 2-го запросов запрос 1 —
update abhipsha/auduserf
set AUUSRTX = (
SELECT usrprffil.uptext
from usrprffil inner join
abhipsha/auduserf
on upuprf =auusrid WHERE AUDUSERF.AUUSRTP <> 'USR'
and auduserf.auusrtp <> 'usr' and auusrid = usrprffil.upuprf)
запрос 2 —
update abhipsha/auduserf set AUUSRTX =
(SELECT uptext fROM usrprffil inner
join abhipsha/auduserf
on usrprffil.UPUPRF = auduserf.AUUSRID
WHERE
usrprffil.UPUPRF in (
SELECT AUUSRID FROM abhipsha/auduserf
WHERE
AUUSRTP <> 'USR' and AUUSRTP <> 'usr'
)
)
для 3-го запроса я получаю ошибку с нулевым значением
запрос 3 —
update abhipsha/auduserf
set auduserf.AUUSRTX = (
select UPTEXT
from usrprffil
WHERE usrprffil.UPUPRF = auduserf.AUUSRID
and usrprffil.UPUPRF in
(SELECT AUUSRID FROM abhipsha/auduserf
WHERE AUUSRTP <> 'USR' and AUUSRTP <> 'usr')
and uptext <> ' ' and
uptext is not null )
Недопустимые значения Null в столбце или переменной AUUSRTX.
Комментарии:
1. Вы говорите «файл». Какая платформа и версия Db2?
Ответ №1:
Попробуйте это:
update abhipsha/auduserf a
set AUUSRTX =
COALESCE
(
(
SELECT min(u.uptext)
from usrprffil u
WHERE a.auusrid = u.upuprf
)
, AUUSRTX
)
WHERE a.AUUSRTP NOT IN ('USR', 'usr')
Примечания:
min
Функция используется, чтобы не возвращать несколько строк из вложенного выбора.- Если вложенный выбор не возвращает строк, значение
AUUSRTX
столбца остается неизменным.
Конечно, вы можете настроить приведенную выше логику в соответствии с вашими потребностями.