我有下表。
表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/