2012-12-28 17 views
8
  1. リスト項目

表1:PostgreSQLの2つのテーブルをマージする方法

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

表2:私は、表1の結果必要

name |count 
xxx | 1 
aaa | 5 

のように: 表1:

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

あなたのアイデアを教えてください。

+0

は、これはIDをチェックする単純なクエリを実行することはできません(名前は、このケースである)と参加していますか? –

答えて

27

UNIONを使用してください。表1に挿入する

select * from table1 
union 
select * from table2 

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

こんにちはunoinはexpexed結果を与えますが、テーブル1は同じままです。テーブル2に新しいものがあればtable1に値を挿入する必要があります – user1897937

+0

テーブル1に挿入するクエリを追加しました – valex

+0

@ user1897937ようこそスタックオーバーフロー。この回答がうまくいけば、[受け入れられたとマークしてください](http://stackoverflow.com/faq#howtoask) – valex

0

あなたは、これはあなたの開発に取り組んでいるかどうかを

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

PostgreSQLがバージョン9.5でMERGE INTOをサポートしているとは思いませんか? – Joril

5

を確認することができます私たちは特別な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); 
    
関連する問題