PostgreSQL: 从另一个表插入

我试图从另一个表中向一个表插入数据,而这些表只有一个共同的列。问题是,TABLE1的列不接受 null 值,所以我不能让它们为空,也不能从 TABLE2获取它们。

我有表1: Id、 col1(非空)、 col2(非空)、 col3(非空)

表二: Id,cola,colb,colc

那么如何将 id 从 TABLE2插入到 TABLE1并用硬编码的字符串(如“ data1”、“ data2”、“ data3”)填充 col1-3呢?

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

会导致:

ERROR: 列“ col1”中的 null 值违反了非 null 约束

204902 次浏览

您可以在 SELECT 中提供文字值:

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

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

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

字符串文字当然是一个值表达式。

你可以使用联合:

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

很晚的回答,但是我认为我的答案对于特定的用例来说更加直接,用户只需要简单地从表 A 中插入(复制)数据到表 B 中:

INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a

参照完整性:

insert into  main_tbl (col1, ref1, ref2, createdby)
values ('col1_val',
(select ref1 from ref1_tbl where lookup_val = 'lookup1'),
(select ref2 from ref2_tbl where lookup_val = 'lookup2'),
'init-load'
);