Postgresql将表数据插入另一个表中

时间:2016-06-03 05:52:04

标签: postgresql sql-insert

我有一个包含不同日历(ws.url("http://url.com") .get() .thenApply(response -> response.asJson()) .thenApply(json -> do something with the JSON) . and so on )的表的数据库。现在我创建了一个新表(table events)并从旧备份中导入了表事件中的所有条目。

现在,我想在事件表中插入来自events_backup的特定日历(query calendar_id = 'foo')的所有条目,但前提是不存在。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

insert into DESTINATION_TABLE 
select WANTED_COLUMNS 
where not exists 
     (select true 
          from SOURCE_TABLE 
          where query calendar_id = 'foo');

答案 1 :(得分:0)

也许我错过了什么,但听起来好像你只是在寻找:

insert into event (pk_column, e1.calendar_id, ...)
select e1.pk_column, e1.calendar_id, ...
from event e1
where e1.calendar_id = 'foo'
  and not exists (select 1 
                  from event e2 
                  where e2.pk_column = e1.pk_column);

以上假设pk_column表中有一个名为event的列是主键或唯一键。

从Postgres 9.5开始的另一个替代方法是使用on conflict子句忽略因唯一约束违规而失败的所有插入:

insert into event (pk_column, e1.calendar_id, ...)
select e1.pk_column, e1.calendar_id, ...
from event e1
on conflict do nothing;