如何在postgresql中合并两个表?

时间:2012-12-28 06:14:02

标签: sql postgresql-9.1

我有两张桌子

表1:

name| count
xxx  | 1
yyyy | 2
zzzz | 3

表2:

name |count
xxx  | 1
aaa  | 5

我希望结果表如下所示 表:

name | count
xxx  | 1
yyyy | 2
zzzz | 3
aaa  | 5

有谁知道怎么做?

5 个答案:

答案 0 :(得分:32)

你应该使用UNION。

select * from table1
union
select * from table2

要插入表1:

INSERT INTO TABLE1
select * from table2 
    where not exists(
            select * from table1 
                 where name=TABLE2.Name 
                       and count=TABLE2.Count
                     )

答案 1 :(得分:8)

我们不需要任何特殊的MERGE / UPSERT命令。

  1. 将一个表中的行合并到另一个表中。

    0xc00e008b
  2. 用于从旧表创建新表。

    INSERT INTO table1
      (SELECT * FROM table2
       WHERE name NOT IN
           (SELECT name FROM table1));
    

答案 2 :(得分:1)

合并表和“更新插入”是一项如此常见的数据库任务,值得在 2021 年更新此答案。假设表相同,这是 postgresql 中最简单和最快的方法:

INSERT INTO table1
    SELECT * FROM table2
    ON CONFLICT DO NOTHING;

在填充 upsert 值之前,创建 'table2' 作为 'table1' 的空副本以确保所有列都相同:

CREATE TABLE "table2"
    AS TABLE "table1"
    WITH NO DATA;

Presto。

答案 3 :(得分:0)

INSERT ... ON CONFLICT DO NOTHINGUNION 快得多。至少看看 explain 语句。

答案 4 :(得分:-1)

你能检查一下这是否适用于你的开发者,

MERGE INTO table1 x
USING table2 b
ON ( x.name=b.name and x.count=b.count)
WHEN NOT MATCHED THEN
INSERT (x.name,x.count)VALUES(b.name,b.count);