web-dev-qa-db-ja.com

postgresqlで2つのテーブルをマージするにはどうすればよいですか?

2つのテーブルがあります

表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

誰でもこれを行う方法を知っていますか?

18
user1897937

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
                     )
37
valex

特別なMERGE/UPSERTコマンドは必要ありません。

  1. あるテーブルの行を別のテーブルにマージすること。

    INSERT INTO table1
      (SELECT * FROM table2
       WHERE name NOT IN
           (SELECT name FROM table1));
    
  2. 古いテーブルから新しいテーブルを作成するため。

    CREATE TABLE new_table AS
    (SELECT * FROM table1
    UNION
    SELECT * FROM table2);
    
10
Sandeep

これが開発者で機能しているかどうかを確認できますか、

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);
0
Mari