如何在postgresql中合并两个表?

use*_*937 14 sql postgresql-9.1

我有两张桌子

表格1:

name| count
xxx  | 1
yyyy | 2
zzzz | 3
Run Code Online (Sandbox Code Playgroud)

表2:

name |count
xxx  | 1
aaa  | 5
Run Code Online (Sandbox Code Playgroud)

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

name | count
xxx  | 1
yyyy | 2
zzzz | 3
aaa  | 5
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

val*_*lex 34

你应该使用UNION.

select * from table1
union
select * from table2
Run Code Online (Sandbox Code Playgroud)

要插入表1:

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


chi*_*ino 12

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

INSERT INTO table1
    SELECT * FROM table2
    ON CONFLICT DO NOTHING;
Run Code Online (Sandbox Code Playgroud)

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

CREATE TABLE "table2"
    AS TABLE "table1"
    WITH NO DATA;
Run Code Online (Sandbox Code Playgroud)

急速。

  • 没有数据,我不知道这一点有多久了,叹息。我总是说“其中primary_key_col = 'asdfasdfasdf”或类似的东西。 (2认同)

San*_*eep 8

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

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

    INSERT INTO table1
      (SELECT * FROM table2
       WHERE name NOT IN
           (SELECT name FROM table1));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用于从旧表创建新表.

    CREATE TABLE new_table AS
    (SELECT * FROM table1
    UNION
    SELECT * FROM table2);
    
    Run Code Online (Sandbox Code Playgroud)