我必须仅提供一个作为输入来检索通过贷款链接的所有客户。示例我有一个表数据为
表格
LOAN_ID CLIENT_ID
1 7
1 8
2 7
4 8
4 9
4 10
5 9
5 11
13 2
14 3
如果我只给出了 CLIENT_ID=7 的输入,那么查询必须选择上表中除最后两列之外的所有列,因为 client_id 7 有 1,2 LOAN_ID,而在 1 中 CLIENT_ID 8 有 Loan_id=4 ,在此贷款CLIENT_id 9 再次有5 作为loan_id。
我们可以在没有 DB2 存储过程的情况下为此编写一个 SQL 查询吗?
最佳答案
这是使用递归 CTE 查询对您的问题的答案:
WITH links AS
( SELECT
loan_id,
client_id as c1,
client_id as c2, 0 as distance
FROM
myTable
-- recursion
UNION ALL
SELECT
t.loan_id,
l.c1 as c1,
tt.client_id as c2,
distance = distance + 1
FROM
links l INNER JOIN
myTable t ON l.c2 = t.client_id
AND l.loan_id != t.loan_id INNER JOIN
myTable tt ON t.loan_id = tt.loan_id
AND t.client_id != tt.client_id
)
SELECT * FROM myTable t
WHERE EXISTS
(SELECT * FROM links
WHERE c2 = t.client_id and c1 = 7);
http://sqlfiddle.com/#!3/8394d/16
我在查询中留下了distance
,以便于理解。
关于sql - DB2中的递归查询以获取链中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963799/