0

我在构建一个 sql 查询时遇到问题。我需要根据交易 ID 选择所有记录,如下所述

  1. 假设用户给定事务 TX444,我需要获取所有具有子 ID = 给定事务的父 ID 和 Parent_Id = Child_Id 的已选择记录的记录。

因此,如果我将 TRansaction 设为 TX444,则应选择显示的所有记录。

  1. 假设用户给定 Transaction = TX234,那么我需要获取 Child Id = 给定事务的 Parent 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 人,但我需要弥补

4

1 回答 1

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不仅可以获取父母/孩子,还可以确定每个人是哪一代。

于 2012-07-13T10:16:01.537 回答