1

我有以下 MySQL 表,其中 B_ID 是指向 Table_B 的 ID 列的外键:

----------    -----------
|Table_A |    |Table_B  |
----------    -----------
|B_ID int|    |ID int   |
----------    |VALUE int|
              -----------

我想计算 Table_B 中 VALUE 列的总和,仅考虑在 Table_A 中显示为外键的 ID。另外,我想在 Table_B 中添加每一行最多一次。

因此,如果表中填充了以下数据:

------    ------------
|B_ID|    |ID | VALUE|
------    ------------
|1   |    |1  | 50   |
|2   |    |2  | 100  |
|2   |    |3  | 200  |
------    ------------

总和为 150(计算为 50+100)。

我现在使用的查询是:

SELECT SUM(b.VALUE)
FROM Table_B b
WHERE b.id IN (SELECT DISTINCT B_ID FROM Table_A)

但是,如果可能的话,我想避免使用子查询。关于如何在没有子查询的情况下执行此操作的任何想法?

注意:该查询本身是较大查询中的子查询,因此只能选择一列。

4

1 回答 1

1

这不会消除子查询,但如果您在中的记录很少且在中a很多,效率会更高b

SELECT  SUM(value)
FROM    (
        SELECT  DISTINCT b_id
        FROM    a
        ) a
JOIN    b
ON      b.id = a.b_id

为此创建一个索引以a.b_id使其快速工作。

如果 中 的记录很少,b而 中的记录很多a,那么您的原始查询会更快。该指数的建议仍然适用。

于 2012-06-06T12:15:06.427 回答