根据其他2表中列的值更新表

时间:2016-12-06 23:42:00

标签: mysql sql-server stored-procedures

我有以下表格。

表1

Id | Data | Values 
1  | rfsd | 23
2  | fghf | 45
3  | rhhh | 23

表3

Id | Data | Values 
1  | rfsd | 23
2  | tfgy | 23

表2

Id | Fields | Counts
1  | 23     |   0 
2  | 45     |   0

正如您所看到的,Counts字段为0.我想看看' Fields'表2中的列,然后与'值'进行比较。表1和表3中的列,只要值出现在'值'中,就会增加计数。字段。

最终结果应该像这样显示

Table 2
Id | Fields | Counts
1  | 23     |   4
2  | 45     |   1

这将是23次出现以来的计数四次,45次出现在'值'表1和表3的字段。

有人可以让我知道如何为此编写存储过程。

我已经实现了这样的东西。

    WITH t1 AS (
              SELECT VALUES, COUNT(*) AS Count2 FROM Table1 GROUP BY VALUES)
UPDATE t2
SET t2.Counts = t1.Count2
FROM Table2 t2
JOIN t1 ON t2.Fields=t1.Values;

WITH t3 AS (SELECT VALUES, COUNT(*) AS Count3 FROM Table3 GROUP BY   VALUES)
UPDATE t2
SET t2.Counts = t3.Count2
FROM
Table2 t2
JOIN t3 ON t2.Fields=t3.Values;

当我使用这个存储过程时,它基于t1表更新t2,然后使用t3表覆盖表t2。

我希望t1和t3列同时在t2表上更新。知道如何更正此存储过程。

2 个答案:

答案 0 :(得分:1)

您可以使用s=733003674 ..=1626549726 将两个表1和3组合在一起(UNION ALL如果您想要不相交联合,UNION ALL如果您想要删除重复项

UNION

答案 1 :(得分:1)

希望这会有所帮助。

SELECT t2.Id, t2.Fields, COUNT(1) Counts
FROM Table2 t2
    LEFT JOIN Table1 t1 ON t2.Fields = t1.[Values]
    LEFT JOIN Table3 t3 ON t2.Fields = t3.[Values]
GROUP BY t2.Id, t2.Fields

如果您需要更新Table2,请使用以下命令: -

WITH Results AS (
    SELECT t2.Id, COUNT(1) Counts
    FROM Table2 t2
       LEFT JOIN Table1 t1 ON t2.Fields = t1.[Values]
       LEFT JOIN Table3 t3 ON t2.Fields = t3.[Values]
    GROUP BY t2.Id
)
UPDATE t
SET Counts = r.Counts
FROM Table2 t
    JOIN Results r ON t.Id = r.Id;