insert upsert中文 - PostgreSQL:从另一个表插入




on conflict (3)

我正在尝试从另一个表中将数据插入到表中,并且这些表只有一个共同的列。 问题是,TABLE1具有不接受空值的列,所以我不能将它们留空,我无法从TABLE2中获取它们。

我有TABLE1:id,col_1(非null),col_2(非null),col_3(非null)

和TABLE2:id,col_a,col_b,col_c

那么如何将TABLE2中的id插入到TABLE1中并使用硬编码字符串填充col_1-3,如“data1”,“data2”,“data3”?

INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";

将导致:

错误:“col_1”列中的空值违反了非空约束


Answers

你可以使用coalesce:

insert into destination select coalesce(field1,'somedata'),... from source;

只需在SELECT中提供文字值:

INSERT INTO TABLE1 (id, col_1, col_2, col_3)
SELECT id, 'data1', 'data2', 'data3'
FROM TABLE2
WHERE col_a = 'something';

选择列表可以包含任何值表达式

但是选择列表中的表达式不必引用FROM子句的表表达式中的任何列; 例如,它们可以是常数算术表达式。

字符串文字肯定是一个值表达式。


使用VALUES语法的INSERT语句可以插入多行。 为此,请包含多个列值列表,每个列表值都包含在括号内,并用逗号分隔。

例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);






sql postgresql insert append