PostgreSQL:从另一个表插入

See*_*umi 90 sql postgresql insert append

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

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

和TABLE2:id,col_a,col_b,col_c

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

INSERT INTO TABLE1 (id) SELECT id FROM TABLE2 WHERE col_a = "something";
Run Code Online (Sandbox Code Playgroud)

将导致:

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

mu *_*ort 178

只需在SELECT中提供文字值:

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

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

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

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


Tom*_*ood 8

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

INSERT INTO table_b (col1, col2, col3, col4, col5, col6)
SELECT col1, 'str_val', int_val, col4, col5, col6
FROM table_a
Run Code Online (Sandbox Code Playgroud)


Sco*_*owe 5

您可以使用合并:

insert into destination select coalesce(field1,'somedata'),... from source;
Run Code Online (Sandbox Code Playgroud)


小智 5

对于引用完整性:

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'
       );
Run Code Online (Sandbox Code Playgroud)