我有以下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)
但是,如果可能的话,我想避免使用子查询。关于如何在没有子查询的情况下执行此操作的任何想法?
注意:此查询本身是较大查询中的子查询,因此它只能选择一列。
答案 0 :(得分: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
中有很多记录,则原始查询会更快。该指数的建议仍然适用。