首页 > 解决方案 > 当关键变量在其中一个表中重复时如何在 SQL 中合并?

问题描述

我有一个包含两个表的数据集。第一个是关于工人的信息,第二个是关于公司的信息。每个工人都有一个他所属公司的“id”。我想从工人基础与公司基础的合并中创建一个新表,保留这两个表中的信息。以下是表的最小可复制示例:

CREATE TABLE workers (id INT, name VARCHAR(100), sex VARCHAR(100), age VARCHAR(100));
INSERT INTO workers (id,name,sex,age)
VALUES (1,"W. White","male",54);
INSERT INTO workers (id,name,sex,age)
VALUES (2,"Hank Schroder","male",51);
INSERT INTO workers (id,name,sex,age)
VALUES (2,"Gus Fring","male",50);
INSERT INTO workers (id,name,sex,age)
VALUES (1,"Skyler","male",44);

CREATE TABLE firms (id INT, name VARCHAR(100), capital INT);
INSERT INTO firms (id,name,capital)
VALUES (1,"Bank Warburg",13051);
INSERT INTO firms (id,name,capital)
VALUES (2,"Atlas Security Information",42094);

我首先尝试使用运算符IN

SELECT * FROM workers WHERE id IN (SELECT id FROM firms);

此命令返回所需的结构,但没有公司的数据(即名称和大写):

1|W. White|male|54
2|Hank Schroder|male|51
2|Gus Fring|male|50
1|Skyler|male|44

我也试过:

MERGE firms AS TARGET
USING workers AS SOURCE 
ON (TARGET.id = SOURCE.id)

返回错误Error: near line 17: near" MERGE ": syntax error。好像sql没有识别关键字“MERGE”。

如何合并保留公司数据?

标签: sqlsqlitemerge

解决方案


您误解了 merge 关键字,它的目的是针对目标表插入和更新源表中的数据,而不需要在存在行的地方单独更新并在不存在行的地方插入。

您没有提供所需输出的基本示例,并且您还声明您尝试的查询为您提供了预期的输出,同时缺少数据......它不能两者兼而有之。

您似乎想要的只是这两个表之间的简单连接,就像这样

select
    w.id, w.name, w.sex, w.age, 
    f.name FirmName, f.capital
from workers w
join firms f on f.id=w.id

如果您想将此查询的结果创建为新表,您可以简单地执行

select
    w.id, w.name, w.sex, w.age, 
    f.name FirmName, f.capital
into <new table name>
from workers w
join firms f on f.id=w.id

推荐阅读