我想使用另一个表来更新一个表,而该表与我想更新的表具有相同的架构。我试图限制对与表中已有值不同的值进行更新,但我不确定此语法是否正确
示例:
CREATE TABLE your_table (
id SERIAL PRIMARY KEY,
column1 TEXT,
column2 INTEGER,
column3 FLOAT,
unique_column TEXT UNIQUE
);
INSERT INTO your_table (column1, column2, column3, unique_column)
VALUES
('apple', 1, 10.5, 'apple_1'),
('banana', 2, 20.0, 'banana_2'),
('orange', 3, 30.5, 'orange_3'),
('apple', 4, 40.0, 'apple_4'),
('banana', 5, 50.5, 'banana_5'),
('orange', 6, 60.0, 'orange_6');
现在升级
INSERT INTO your_table (column1, column2, column3)
SELECT value1, value2, value3
FROM another_table
ON CONFLICT (unique_column)
DO UPDATE SET
column1 = EXCLUDED.column1,
column2 = EXCLUDED.column2,
column3 = EXCLUDED.column3
WHERE your_table.column1 IS DISTINCT FROM EXCLUDED.column1
OR your_table.column2 IS DISTINCT FROM EXCLUDED.column2
OR your_table.column3 IS DISTINCT FROM EXCLUDED.column3;
如果another_table
的值与your_table
的值不同,此打乱是否仅更新your_table
中(column1,column2,column3)
的值?如果插入的键在(unique_column)
中不匹配,则会插入特定的行,对吗?
2条答案
按热度按时间1u4esq0p1#
如果another_table中的值与your_table中的值不同,此upset是否只更新your_table中的(column1,column2,column3)的值?
是的,如果这些列中的任何一列在your_table中具有不同的值,它将更新。
如果插入了在(unique_column)中不匹配的键,那么特定的行将被插入,对吗?
是的
ctehm74n2#
否,始终插入一行;你永远不会得到
on conflict
。您使用列unique_column
作为唯一行列式,但该列未列出insert
,因此始终为null。Null从不在冲突时引发匹配。参见demo here。您必须为unique_column
列提供适当的值:那么@lokeshkumar的答案将是正确的。