sql - 将数据从一个表插入到另一个表中,其中一列有效地匹配两者
问题描述
我有两个表,“BLANKTABLE”和“ACTIVETABLE”。它们具有相同的列“公司、城市、州”。活动表每列有数百万条记录,BLANK 表只填写了“公司”列(其他列为空)。两者之间有很大的重叠。
我想将 ACTIVETABLE 中的行数据(城市和州)插入到 BLANKTABLE 中,其中公司字段在两者上都匹配。因此,如果两个表的公司列中都有公司“示例”,它会将 ACTIVE 中的城市和州数据插入到 BLANK 中,基本上从 ACTIVE 中克隆该行。我的第一个想法是这个,但我觉得它的效率非常低。
INSERT INTO BLANKTABLE
(Company, [City], [State])
SELECT de.company,
de.[city],
de.[state]
FROM [ACTIVETABLE] de
WHERE EXISTS(SELECT website, company, zip
FROM BLANKTABLE d2
WHERE d2.company = de.company)
有什么想法吗?
更新:
实际上,也许这就是方式
UPDATE blanktable
SET blanktable.city = activetable.city,
blanktable.state = activetable.state
FROM blanktable d2
INNER JOIN activetable de
ON d2.company = de.company;
正确的?
解决方案
在我看来,任何公司都有多个 ActiveTable 行,您想按公司进行汇总,然后更新 BlankTable(如果您在 ActiveTable 中找到位于 BlankTable 中的公司,则可能添加到 BlankTable)。
如果您使用 Merge 语句而不是 Update 或 Insert,我认为整个过程对您来说会更清楚一些。 您可以在此处阅读有关语法的信息。
基本上,这里重要的是设计一个针对 ActiveTable 的查询,该查询返回每家公司的一行,其中包含您希望在 BlankTable 中拥有的城市和州的特定值。如果您有可以区分的数据,我建议您使用最新的 ActiveTable 值。您可以填写空白,但基本语法是:
Merge into Blanktable b
Using (Select <company city state values> From activeTable Group By company) a
On B.company = A.company
When Matched Then Update Set b.city = a.city, b.state=a.state
When Not Matched Then Insert (company,city,state) Values (a.company, a.city, a.state)
如果公司存在于 BlankTable 中,则此完整语法更新;如果公司不存在,则插入。如果您不想将记录添加到 BlankTable,只需更新现有记录,然后省略 When Not Matched 部分。
推荐阅读
- ajax - 如何同时运行多个ajax请求
- vim - 如何对 EJS 文件使用 vim 自动完成功能
- python - Elastic Beanstalk - 命令“/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt”返回非零退出状态 1
- swiftui - 使用 SwiftUI 显示错误
- typescript - 返回从数组参数中输入的键定义的选择类型的函数
- tensorflow - 如何为图像分类问题选择卷积神经网络中密集层的单元数?
- html - 你好,我的链接失效了。每次我尝试点击它们时,它都会提示一个错误,除了主页(索引)链接
- javascript - 每当新请求到来时,如何更改元素的高度
- spring-boot - 在更新实体的特定属性时,其他属性获取空值
- python - 找到至少共享一个 x 或 y 点的 (x, y) 对