对于我的示例,我试图在TABLE1中添加多行的RANGE列值,其中每行的SOURCE列值等于TABLE1中不同行的ID列值,其中PARENT列值这些不同的行等于TABLE2中的ID列值。我还绘制了各种图表以直观地显示此内容。
我在一次只能选择一行TABLE2.ID值以插入Select子查询时遇到麻烦,然后,主选择需要使用下一行的TABLE2.ID值一次又一次地运行。每个表中有数千行。 我玩过抓取和滞后,但是我现在真的不了解该如何解决。我仍在研究方法。...如下所示,我相信它想添加所有TABLE1行的所有RANGE值,因为子查询的选择ID读取为TABLE2中的所有行(其中TABLE1.SOURCE = TABLE2.ID)?
Select
ID,
(Select SUM(RANGE)
from TABLE1
where SOURCE in
(Select A.ID
from TABLE1 A, TABLE2 B
where A.PARENT = B.ID
)
) as "SUM(RANGE)"
from TABLE2
______________
Result:
______________
ID SUM(RANGE)
A10 18
A11 18
预期结果:
ID SUM(RANGE)
A10 13
A11 5
表格数据示例:
TABLE1
ID RANGE SOURCE PARENT
A1 A10
A2 A10
A3 A10
A4 A11
A5 A11
2 A1
5 A2
6 A3
1 A4
4 A5
---------------------------------
TABLE2
ID
A10
A11
答案 0 :(得分:1)
我想你是说这样的话:
Select a1.parent as ID, sum(a2.range) as "SUM(RANGE)"
From table1 a1
Left Join table1 a2 on ( a2.source = a1.id )
Inner Join table2 b on ( a1.parent = b.id )
Group By a1.parent
Order By a1.parent;
其中包含self-join
的
答案 1 :(得分:1)
您可以尝试通过self-join
和TABLE1
在ID
中SOURCE
进行SUM
和GROUP BY
SELECT t1.parent,SUM(ts.range) as "SUM(RANGE)"
FROM TABLE1 t1
JOIN TABLE1 ts on t1.ID = ts.SOURCE and t1.SOURCE IS NULL
WHERE t1.parent in (SELECT ID FROM TABLE2)
GROUP BY t1.parent