今天我被一位采访者问过一个问题 我们有三个名为表A,B和C的表。
那些表是这样的
A B C
------------------ -------------------------- ----------------------------
| ID | ProjectID | | ID | LocationID | aID | | ID | points | LocationID |
------------------ -------------------------- ----------------------------
| 1 | 15 | | 1 | 131 | 1 | | 1 | 123333 | 131 |
| 2 | 15 | | 2 | 132 | 1 | | 2 | 123223 | 132 |
| 3 | 15 | | 3 | 133 | 1 | | 3 | 522 | 211 |
| 4 | 12 | | 4 | 134 | 2 | | 4 | 25 | 136 |
------------------ | 5 | 136 | 2 | | 5 | 25 | 133 |
| 6 | 137 | 3 | | 6 | 25 | 134 |
| 7 | 138 | 1 | | 7 | 25 | 135 |
-------------------------- ----------------------------
现在他告诉我写一个查询,该项查询总结项目为15的那些地点的点。
首先,我编写了查询,以便像这样从表A中获取ID
SELECT ID from A where projectID = 15
然后我将此结果传递给表b查询,就像这样
SELECT LocationID FROM B WHERE aID IN ( SELECT ID from A where projectID = 15 )
然后我就像这样计算这些位置的总和
SELECT SUM(points) from C where LocationID IN(SELECT LocationID FROM B WHERE aID IN ( SELECT ID from A where projectID = 15))
我的结果很好,查询正确。但他拒绝了我的回答,他说这个嵌套的IN Clause会减慢整个过程,就像我们有数千条记录一样。 然后他给了我另一个机会来回顾我的答案,但我无法理解。
无论如何要优化这个还是有其他方法来做同样的事情。 有帮助吗?感谢
答案 0 :(得分:1)
试试这可能会解决您的问题。
Select SUM(C.points) FROM C JOIN B ON C.LocationID = B.LocationID JOIN A ON B.aID = A.ID where A.ProjectID = 15 GROUPBY A.ProjectID
答案 1 :(得分:1)
试试这个....我希望它会起作用
select sum(c.points) as sum_points
from A a,B b,C c where
a.ID=b.aID and
b.LocationID=c.LocationID
and a.projectID=15