Написать странный запрос с update

1. polin11 15.02.24 09:18 Сейчас в теме
Использую PGSQL, упрощенный запрос выглядит так
 WITH a
         AS ( SEL ECT DISTINCT UNNEST(ARRAY['777', NULL]) "Ключ",
         UNNEST(ARRAY['111', '222']) "Знач"
         )
 upd ate "Документы"
 set "Название" = "Название" || '_' || a."Знач"
 FR OM a
 where "Id" IS NOT DISTINCT FR OM  a."Ключ"
returning *
Показать

хочется переписать запрос для того чтобы попадать в индекс,
отдельно для нулевых значений и не нулевых, такого типа

WITH a
         AS ( SEL ECT DISTINCT UNNEST(ARRAY['777', NULL]) "Ключ",
         UNNEST(ARRAY['333', '444']) "Знач"
         )
 update "Документы"
 se t "Название" = "Название" || '_' || a."Знач"
 FR OM a
 wh ere
   EXISTS (
    SELECT TRUE
    FR OM a
    WH ERE "Id" = a."Ключ" and "Id" IS NOT NULL and a."Ключ" IS NOT NULL  
    UNI ON
     SEL ECT TRUE
    FR OM a
    WH ERE "Id" IS NULL and a."Ключ" IS NULL
   )
returning *
Показать

этот запрос неверно определяет Знач, для своего Ключа.
Как написать подобный запрос, если не прибегать к CTE?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Said-We 15.02.24 10:57 Сейчас в теме
(1)
Как написать подобный запрос, если не прибегать к CTE?
Из спортивного интереса что ли?
3. Said-We 16.02.24 01:38 Сейчас в теме
(1) Копи-паст Вас не будет смущать?
https://onecompiler.com/postgresql/424jpw2u4
Прикрепленные файлы:
4. Said-We 16.02.24 02:19 Сейчас в теме
(1)И сам апдейт у Вас странный. Обычно как-то так (на коленке писал - нет у меня Ваших таблиц):
UPD ATE t1
SE T t1."Название" = t1."Название" || '_' || t2."Знач"
FROM "Документы" as t1
inner join (SELECT DISTINCT
         UNNEST(ARRAY['777', NULL]) "Ключ",
         UNNEST(ARRAY['333', '444']) "Знач"
         ) AS t2
on t1."Id" = t2."Ключ" or (t1."Id" is null and t2."Ключ" is null)
Опять же SELECT DISTINCT в Вашем варианте допускает несколько одинаковых ключей с разными значениями - смотреть картинку. Нужно взять один из них.
https://onecompiler.com/postgresql/424jupj4w
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот