在SQL语句中查找递归和

Kra*_*hra 4 sql oracle algorithm recursion

我有两张A和B表: A (id, dep_id)B (id, amount)

这些表中的数据是这样的

A                 B

id  dep_id        id   amount
--- -------       ---- --------
1   2             1    100    
2   3             2    200
3   NULL          3    300   
4   NULL          4    400
Run Code Online (Sandbox Code Playgroud)

id表A中的列适用id于表B.对于id表A中的给定,可能存在表B的dep_id保留id.

要求是计算B中的条目及其所有相关条目的总和.这必须在一个单独的SQL查询中完成.我不能使用PL/SQL块.知道如何做到这一点.

例:

sum(id=1) = 100(id=1,dep_id=2) + 200(id=2,dep_id=3) + 300(id=3) = 600
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 5

您可以使用CONNECT BY ROOT构建依赖关系链接(分层查询),然后聚合:

SQL> SELECT ID, SUM(amount)
  2    FROM (SELECT connect_by_root(a.id) ID, b.amount
  3            FROM a
  4            JOIN b ON a.id = b.id
  5           START WITH a.ID = 1
  6           CONNECT BY PRIOR a.dep_id = a.ID)
  7   GROUP BY ID;

        ID SUM(AMOUNT)
---------- -----------
         1         600
Run Code Online (Sandbox Code Playgroud)

在plsqlchallenge的SQL测验中,可以使用类似但稍微复杂的模式(例如id:1需要4x id:2,id:3每个需要8x )的其他解决方案.