PostgreSQL:从另一个表插入

我试图插入数据到另一个表的表中,并且这些表只有一列是相同的。 问题是,TABLE1有不接受空值的列,所以我不能让它们为空,我不能从TABLE2中得到它们。

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

和TABLE2:id,col_a,col_b,col_c

所以我怎样才能从TABLE2插入ID到TABLE1,并填写col_1-3硬编码的string,如“data1”,“data2”,“data3”?

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

将导致:

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

只需在SELECT中提供文字值:

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

select列表可以包含任何值expression式 :

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

而string文字肯定是一个值expression式。

你可以使用coalesce:

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