繁体   English   中英

PostgreSQL:从另一个表插入

[英]PostgreSQL: insert from another table

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

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

和表2:id、col_a、col_b、col_c

那么我如何将 id 从 TABLE2 插入到 TABLE1 并用硬编码字符串填充 col_1-3 ,如“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';

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

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

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

对于引用完整性:

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'
       );

您可以使用合并:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM