#sql #postgresql #case
#sql #postgresql #случай
Вопрос:
Я пытаюсь обновить несколько ячеек, но ничего, не могли бы вы помочь мне оптимизировать мой запрос?
with upd AS (
UPDATE era
SET gender = CASE id
WHEN 3 THEN 'Female'
WHEN 4 THEN 'Male'
END,
SET city = CASE id
WHEN 3 THEN 'Minsk'
WHEN 4 THEN 'Brest'
END
WHERE id IN (3, 4)
returning *
)
select * from upd;
Ответ №1:
Я бы посоветовал вам использовать производную таблицу для этой логики:
WITH upd AS (
UPDATE era
SET gender = v.gender,
city = v.city
FROM (VALUES (3, 'Female', 'Minsk'), (4, 'Male', 'Brest')
) v(id, gender, city)
WHERE v.id = era.id
RETURNING *
)
SELECT *
FROM upd;
Используя этот метод, вам не нужно повторять значения или использовать сложные CASE
выражения — оба из которых подвержены ошибкам.
Ответ №2:
Вам просто не нужен второй SET
with upd AS (
UPDATE era
SET gender = CASE id
WHEN 3 THEN 'Female'
WHEN 4 THEN 'Male'
END,
city = CASE id
WHEN 3 THEN 'Minsk'
WHEN 4 THEN 'Brest'
END
WHERE id IN (3, 4)
returning *
)
select * from upd;