我在构建一个SQL查询时遇到问题。 我需要根据交易ID选择所有记录,如下所述
因此,如果我将TRansaction作为TX444,则应选择显示的所有记录。
我正在尝试编写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人,但我需要做到这一点
答案 0 :(得分: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
而不仅仅是{{1}}得到父母/子女,还要确定每一代是哪一代。