sql - 当关键变量在其中一个表中重复时如何在 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”。
如何合并保留公司数据?
解决方案
您误解了 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
推荐阅读
- python - 在 MATLAB 中读取 dict 的 python pickle 会导致错误
- sql-server - 如何克服 Microsoft SQL Server 中 IN 运算符的资源限制
- google-chrome-extension - Chrome 扩展 ID,对所有用户安装的浏览器都一样吗?
- javascript - Div 在 React.js 中没有使用 100% 的高度
- r - 在 R 包 bool 参数中使用 C 始终为真
- java - Jersey InvocationCallback Completed:哪个线程用于调用这些方法
- regex - 通过正则表达式在变量中使用 Grafana / Elasticsearch 查询
- python-3.x - 主 GUI TK 中的乌龟圆形
- swift - 如何使新的紧凑型 UIDatePicker 更宽?- 斯威夫特
- reactjs - 编译失败,找不到模块