SQL 层次关系 - CONNECT_BY_ROOT - DB2

问题描述 投票:0回答:0

我想列出一个层次表中的所有关系。

用例:找到所有配偶(丈夫/妻子)关系(现在和过去),这样我们只能清除一个 当所有成员都不再是客户时的客户群。

我正在尝试使用 SQL CONNECT_BY_ROOT 来简化流程,但我做不到。

设置:

CREATE TABLE CONJ (SPOUSE1 NUMERIC ( 9, 0) NOT NULL WITH    
DEFAULT, SPOUSE2 NUMERIC ( 9, 0) NOT NULL WITH DEFAULT)              
                                                                     
                                                                     
INSERT INTO CONJ VALUES(1, 2)      
INSERT INTO CONJ VALUES(1, 3)      
INSERT INTO CONJ VALUES(3, 4)      
INSERT INTO CONJ VALUES(5, 4)      
INSERT INTO CONJ VALUES(6, 5)      
INSERT INTO CONJ VALUES(7, 8)      
INSERT INTO CONJ VALUES(9, 5)   

我想查看所有关系的列表。数据库:

SELECT CONNECT_BY_ROOT  SPOUSE1 AS PARENT ,   
SPOUSE2 AS CHILD, LEVEL LEVEL
FROM CONJ START WITH  SPOUSE1 <> 0                                              
CONNECT BY NOCYCLE PRIOR SPOUSE2 = SPOUSE1
UNION
SELECT CONNECT_BY_ROOT  SPOUSE2 AS PARENT ,   
SPOUSE1 AS CHILD, LEVEL LEVEL
FROM CONJ START WITH  SPOUSE2 <> 0                                              
CONNECT BY NOCYCLE PRIOR SPOUSE2 = SPOUSE1

输出:

.+....1....+....2....+....3....+....4..      
  PARENT         CHILD           LEVEL       
       3             4               1       
       1             4               2       
       6             4               2       
       4             3               1       
       3             1               1       
       9             4               2       
       5             4               1       
       1             2               1       
       3             3               2       
       6             5               1       
       4             5               1       
       1             3               1       
       8             7               1       
       9             5               1       
       5             9               1       
       5             5               2       
       2             1               1       
       7             8               1       
       5             6               1       

问题:它拾取 1-4 关系(通过 1-3、3-4)和 6-4 关系(通过 6-5、5-4)
但错过了 3-5(通过 1-3、4-3)关系。

sql db2 ibm-midrange
© www.soinside.com 2019 - 2024. All rights reserved.