обновление для нескольких столбцов с различными условиями - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть оператор INSERT, где значения предоставляются через SELECT из другой таблицы. ПО КОНФЛИКТУ Я обновляю несколько столбцов. Мне просто интересно, если можно установить каждый столбец, соответствующий уникальному условию

Теперь у меня есть решение, которое работает, но оно не идеально.

В принципе, что-то вроде этого соответствовало бы моему желаемому результату.

WITH table_a (
 --joining two tables
)

INSERT INTO table_b
SELECT * FROM table_a
ON CONFLICT
ON CONSTRAINT table_b_pkey DO UPDATE
SET column_a = EXCLUDED.column_a
WHERE table_b.column_a < EXCLUDED.column_a
OR 
SET column_b = EXCLUDED.column_b
WHERE table_b.column_b < EXCLUDED.column_b

1 Ответ

2 голосов
/ 25 апреля 2019

Используйте CASE, например:

INSERT INTO table_b
SELECT * FROM table_a
ON CONFLICT
ON CONSTRAINT table_b_pkey DO UPDATE
SET 
    column_a = CASE 
        WHEN table_b.column_a < EXCLUDED.column_a 
        THEN EXCLUDED.column_a 
        ELSE table_b.column_a END,
    column_b = CASE 
        WHEN table_b.column_b < EXCLUDED.column_b 
        THEN EXCLUDED.column_b 
        ELSE table_b.column_b END
...