25

私は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

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

4

5 に答える 5

46

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
                     )
于 2012-12-28T06:20:19.357 に答える
18

特別な 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);
    
于 2015-09-07T14:32:24.953 に答える
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);
于 2012-12-28T07:24:40.160 に答える
1

INSERT ... ON CONFLICT DO NOTHINGよりもはるかに高速ですUNION。少なくともexplain声明を調べてください。

于 2021-03-06T22:56:00.383 に答える