2014-09-21 52 views
2

我必須通過僅提供一個作爲輸入來檢索通過貸款鏈接的所有客戶端。例如我有一個表的數據作爲DB2中的遞歸查詢以獲取鏈中的所有項目

TABLEA

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查詢嗎?

+0

我已經改寫了你的問題,因爲你的例子中沒有父子概念。 – Bulat 2014-09-22 09:11:05

回答

1

這裏的答案是使用遞歸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查詢裏面,使其更容易理解。

+0

感謝您的查詢Bulat。我從來沒有使用過CTE /遞歸。我正在嘗試在DB2中使用START BY和CONNECT。無論如何感謝您的查詢,我現在更好地理解使用RCTE。 – daniel 2014-09-24 22:03:21

+0

我測試了查詢,但它是無限循環。 – daniel 2014-10-24 18:48:04

+0

我增加和距離<1 ,,但如果我加入超過1像距離<7。這需要很長時間。這是我們如何限制無限循環? – daniel 2014-10-24 18:55:48

相關問題