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;