我有两张桌子
表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
有谁知道怎么做?
答案 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命令。
将一个表中的行合并到另一个表中。
0xc00e008b
用于从旧表创建新表。
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 NOTHING
比 UNION
快得多。至少看看 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);