使用另一个表

时间:2016-01-19 11:23:39

标签: sql postgresql

我有两张桌子

 CREATE TABLE table1 (
    id bigint NOT NULL,
    name character varying(255),
    CONSTRAINT table1_pkey PRIMARY KEY (id)
 );

 CREATE TABLE table2 (   
     id bigint NOT NULL,
     name character varying(255),
     table1_id bigint,
     CONSTRAINT table2_pkey PRIMARY KEY (id), 
     CONSTRAINT fk_table1_table2 FOREIGN KEY (table1_id) 
     REFERENCES table1 (id) MATCH SIMPLE
 );

现在我要做的是为table1中的每个条目添加table2中的条目

即如果我的表1有条目

|id | name   |
|1  | First  | 
|2  | Second | 
|3  | Third  | 

我需要在table2中创建三个条目

insert into table2 (id,name,table2_id) values (nextval('table2_seq'),'new entry', 1);
insert into table2 (id,name,table2_id) values (nextval('table2_seq'),'new entry', 2);
insert into table2 (id,name,table2_id) values (nextval('table2_seq'),'new entry', 3);

并且因为每个新条目只更改了外键,我想知道是否有可能自动执行此过程。 是否可以通过查询实现,还是应该查看过程?

2 个答案:

答案 0 :(得分:3)

使用基于选择的插入:

insert into table2 (id,name,table1_id)
select nextval('table2_seq'), 'new entry', t1.id
from table1;

答案 1 :(得分:0)

我努力在子查询中获得“SELECT ... WHERE”,可能咖啡不够,但最终确定了以下语法:

insert into table (col1, col2 ...)
select 'staticval1',
r.variable1 from reftable r where r.variable2 = 'Some search term'
...;