首页 > 解决方案 > 将基于另一个表值修改的表与 MySQL 中的该表连接起来

问题描述

对于以下问题,我需要一些有关 MySQL 查询的帮助。

我有两个表 A(id,ref_id)和 B(ref_id(主键),类,脉冲),其中 A.ref_id 存在于 B.ref_id 中。ref_id 具有从 1 开始的整数值,是 B 的 P_k。

A.id | A.ref_id
  1  |  2
  2  |  3
B.ref_id | B.pulse | B.class
     1   |  100    | X
     2   |  50     | Y
     3   |  100    | X

我想要做的是创建一个表,其中所有脉冲值的总和对应于所有 B.ref_id 小于 A.ref_id。此外,仅应考虑其 B.class 与从 A.ref_id 引用的 B.ref_id 的 B.class 相同的那些脉冲。例如,

A.ref_id | sum
  2      | 50
  3      | 200

在此示例中,值为 2 的 A.ref_id 指的是相应的 B.ref_id,因此具有 B.class Y。由于我想要所有 B.ref_id<=2 的脉冲值总和,并且没有其他具有 B.class 的行=Y,sum 的值为 50。但是,对于 A.ref_id=3,对应的 B.class 是 X,我想要迄今为止发生的所有 B.pulse 与同一类的总和。因此 sum 的值将是 100(来自 B.ref_id=1)+ 100(来自 B.ref_id=A.ref_id=3)= 200。

有人可以帮我解决这个问题吗?

我在 MySQL 中需要一些东西,比如:

SELECT A.ref_id, sum 
FROM A
JOIN (SELECT class, SUM(B.pulse) as sum 
      FROM B WHERE B.ref_id<=A.ref_id 
      GROUP BY B.class) t
ON t.class= (SELECT class FROM B WHERE B.ref_id=A.ref_id)

以上不起作用,因为我无法在子查询(t)中引用 A.ref_id。没有这个条件加入并不能帮助我做我想做的事。

谢谢!!

标签: mysqlsqljoin

解决方案


您可以通过将 B 的 2 个副本连接到 A 来做到这一点:

SELECT a.ref_id, 
       SUM(b2.pulse) `sum`
FROM TableA a 
INNER JOIN TableB b1 ON b1.ref_id = a.ref_id
INNER JOIN TableB b2 ON b2.ref_id <= b1.ref_id AND b2.class = b1.class
GROUP BY a.ref_id

请参阅演示
结果:

ref_id
2 50
3 200

推荐阅读