use*_*937 14 sql postgresql-9.1
我有两张桌子
表格1:
name| count
xxx | 1
yyyy | 2
zzzz | 3
Run Code Online (Sandbox Code Playgroud)
表2:
name |count
xxx | 1
aaa | 5
Run Code Online (Sandbox Code Playgroud)
我希望结果表如下表所示:
name | count
xxx | 1
yyyy | 2
zzzz | 3
aaa | 5
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
val*_*lex 34
你应该使用UNION.
select * from table1
union
select * from table2
Run Code Online (Sandbox Code Playgroud)
要插入表1:
INSERT INTO TABLE1
select * from table2
where not exists(
select * from table1
where name=TABLE2.Name
and count=TABLE2.Count
)
Run Code Online (Sandbox Code Playgroud)
chi*_*ino 12
合并表和“更新插入”是一项常见的数据库任务,值得在 2021 年更新此答案。假设表相同,这是 postgresql 中最简单、最快的方法:
INSERT INTO table1
SELECT * FROM table2
ON CONFLICT DO NOTHING;
Run Code Online (Sandbox Code Playgroud)
在填充 upsert 值之前,创建“table2”作为“table1”的空副本,以确保所有列都相同:
CREATE TABLE "table2"
AS TABLE "table1"
WITH NO DATA;
Run Code Online (Sandbox Code Playgroud)
急速。
我们不需要任何特殊的MERGE/UPSERT命令.
将一个表中的行合并到另一个表中.
INSERT INTO table1
(SELECT * FROM table2
WHERE name NOT IN
(SELECT name FROM table1));
Run Code Online (Sandbox Code Playgroud)用于从旧表创建新表.
CREATE TABLE new_table AS
(SELECT * FROM table1
UNION
SELECT * FROM table2);
Run Code Online (Sandbox Code Playgroud)