我有两张桌子
表格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
有谁知道如何做到这一点?
我有两张桌子
表格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
有谁知道如何做到这一点?
您应该使用 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
)
我们不需要任何特殊的 MERGE/UPSERT 命令。
将一个表中的行合并到另一个表中。
INSERT INTO table1
(SELECT * FROM table2
WHERE name NOT IN
(SELECT name FROM table1));
用于从旧表创建新表。
CREATE TABLE new_table AS
(SELECT * FROM table1
UNION
SELECT * FROM table2);
合并表和“更新插入”是一项常见的数据库任务,值得在 2021 年更新此答案。假设表相同,这是 postgresql 中最简单和最快的方法:
INSERT INTO table1
SELECT * FROM table2
ON CONFLICT DO NOTHING;
在填充 upsert 值之前,将“table2”创建为“table1”的空副本,以确保所有列都相同:
CREATE TABLE "table2"
AS TABLE "table1"
WITH NO DATA;
快速。
你能检查这是否在你的开发人员中工作,
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);
INSERT ... ON CONFLICT DO NOTHING
比 快得多UNION
。至少看看explain
声明。