2012-07-13 24 views
0

我在構建一個sql查詢時遇到了問題。 我需要一個基於交易ID來選擇所有記錄,因爲我下面自我加入關於級聯結果的查詢

  1. 解釋假定用戶指定的交易TX444,我需要獲取給定的交易和PARENT_ID =已經選定記錄Child_Id的子ID =父ID的所有記錄。

因此,如果我將TRansaction作爲TX444,應該選擇顯示的所有記錄。

  1. 假設用戶給定Transaction = TX234,那麼我需要獲取所有記錄,其中Child ID =給定事務的父Id和已選擇記錄的Parent_Id = Child_Id。 在這種情況下,最後的記錄將不會被包括在內。

我試圖寫SELECT查詢。但是,沒有什麼工作:(

PARENT_ID  CHILD_ID     TRANSACTION  STATE 
1    4       TX123   PF 
2    4       TX128   PS 
3    5       TX230   FF 
4    5       TX234   FS 
5    0       TX444   DS 

我不是SQL的人,但我需要做這件事

+1

你正在使用哪些DBMS? – GarethD 2012-07-13 07:48:35

+0

Oracle數據庫 – Reddy 2012-07-13 09:52:38

+0

請幫我出:( – Reddy 2012-07-13 10:11:21

回答

2

在Oracle中,你可以使用CONNECT BY遞歸遍歷行:

SELECT Parent_ID, 
     Child_ID, 
     Transaction, 
     State, 
     CASE Level WHEN 1 THEN 'Selected' ELSE 'Child' END AS Relation 
FROM Transactions 
START WITH Transaction = 'TX444' 
CONNECT BY PRIOR Child_ID = Parent_ID 
UNION 
SELECT Parent_ID, 
     Child_ID, 
     Transaction, 
     State, 
     CASE Level WHEN 1 THEN 'Selected' ELSE 'Parent' END AS Relation 
FROM Transactions 
START WITH Transaction = 'TX444' 
CONNECT BY PRIOR Parent_ID = Child_ID; 

我已經把對SQL Fiddle的例子,但是我用稍微不同的孩子/父母到您的數據充分顯示瞭如何可以使用CONNECT BY不只是爲了得到父母/子女,還要確定哪些摹每個都是。