更新具有不同条件的多个列

问题描述 投票:0回答:1

我有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
sql postgresql insert-update
1个回答
2
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.