sql - 如何从另一个表更新表,有 2 列
问题描述
我正在使用 SQL Server 数据库并想要一种方法来更新MachinesSummary.ShareCount
.
这是我的两张桌子
Machines总结
ID Machine1 Machine2 ShareCount
-------------------------------
1 A J NULL
2 K S NULL
3 A E NULL
4 J A NULL
5 Y U NULL
6 S W NULL
7 G A NULL
8 W S NULL
另一张表是MachineDetails
ProcessNo Machine
------------------
1 A
1 H
1 W
2 A
2 J
2 W
3 Y
3 K
4 J
4 A
我想ShareCount
在MachineSummary
表格中更新Machine1
和Machine2
共享的进程数。
对于表中的记录1MachineSummary
,我想要两个共享的进程数,在这种情况下MachineDetails
为1
而对于记录4是2ShareCount
我试过这个
UPDATE M
SET ShareCount = COUNT(DISTINCT X.ProcessNo)
FROM
(SELECT ProcessNo, ',' + STRING_AGG(Machine,',') + ',' Machines
FROM MachineDetails
GROUP BY ProcessNo) X
INNER JOIN MachinesSummary M ON X.Machines LIKE '%'+ M.Machine1 + '%'
AND X.Machines LIKE '%'+ M.Machine2 + '%'
但我想知道是否有更简单的高性能方式
该MachineDetails
表有 2.5 亿行。
解决方案
好吧,我会使用 aself-join
来获取组合的数量:
UPDATE M
SET ShareCount = num_processes
FROM MachinesSummary M JOIN
(SELECT md1.Machine as machine1, md2.Machine as machine2, COUNT(*) as num_processes
FROM MachineDetails md1 JOIN
MachinesDetails md2
ON md1.processno = md2.processno
GROUP BY md1.Machine, md2.Machine
) md
ON md.Machine1 = M.machine1 AND md.Machine2 = M.machine2;
推荐阅读
- jquery - 光滑滑块上的灯箱并将内容添加到与图像一起弹出的灯箱
- javascript - 使用 jquery 函数播放或暂停视频
- python-3.x - 就像我们在 scala 中一样,如何在 python 中一次性完成 Groupby 和 map
- python - 两个类似文件之一无法识别 date_parser 格式
- python - 使用多 GPU 和多线程、Pytorch 的对象检测推理
- python-3.x - 为什么使用 opencv 进行图像屏蔽会返回“输入参数的大小不匹配”?
- c# - 计划的 .NET WebJob V3 示例
- python-3.x - 使用 Python 向其他用户授予使用谷歌表的权限
- ruby-on-rails - 在没有 webpack 开发服务器的 Heroku 上部署 Rails React 应用程序
- python - 在已经运行的进程之间传输队列实例