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

标签 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

如您所见,计数字段为 0。我想查看表 2 中的“字段”列,然后与表 1 和表 3 中的“值”列进行比较,并在值出现在表 3 中时增加计数“值”字段。

最终结果应该是这样的

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

这将是自表 1 和表 3 的“值”字段中 23 出现四次和 45 出现一次以来的计数。

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

我已经实现了类似的东西。

    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。

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

最佳答案

您可以使用UNION ALL将两个表1和3组合在一起(UNION ALL如果您想要不相交的并集,UNION如果您想要删除重复的)

WITH t13 AS (
    SELECT Id, Data, [Values]
    FROM Table1
    UNION ALL
    SELECT Id, Data, [Values]
    FROM Table3   
), cte AS (
    SELECT 
        [Values], 
        COUNT(*) AS Count2 
    FROM t13
    GROUP BY
        [Values]
)
UPDATE t2
SET Counts = cte.Count2
FROM
    Table2 t2 JOIN cte ON t2.Fields = cte.[Values];

关于mysql - 根据其他 2 个表中的列值更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006960/

相关文章:

php - 基于添加多个列的值的复杂 SQL 查询

c# - 使用 C# 操作 SQL Server

sql - SYSDATETIME() 是否比 GETDATE() 花费更多?

stored-procedures - 使用IF和THEN在Oracle 11g pl/sql中创建存储过程

php - 安装时 WordPress WSOD

php - 如果浮点型小数部分的LSB为零,Mysql会丢弃它

sql-server - 如何在 Kubernetes Pod 中执行 sql 脚本文件?

c# - 如何找到违反约束的列?

sql - sp_send_dbmail 中的局部变量?

php - 在 jQuery 数据表中显示数据库记录