首页 > 解决方案 > 如何从另一个表更新表,有 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

我想ShareCountMachineSummary表格中更新Machine1Machine2共享的进程数。

对于表中的记录1MachineSummary,我想要两个共享的进程数,在这种情况下MachineDetails1

而对于记录42ShareCount

我试过这个

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 亿行。

标签: sqlsql-servertsql

解决方案


好吧,我会使用 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;

推荐阅读