我相信你将需要家长子记录存储在一个单一的表,如下所示:
1 NULL A
2 1 B
3 1 C
4 1 D
5 2 F
6 2 G
7 4 H
8 4 I
9 7 J
10 7 K
11 9 L
然后你就可以查询数据如下:
WITH T (id, pid, name) AS (
SELECT 1, NULL, 'A'
UNION ALL
SELECT 2, 1, 'B'
UNION ALL
SELECT 3, 1, 'C'
UNION ALL
SELECT 4, 1, 'D'
UNION ALL
SELECT 5, 2, 'F'
UNION ALL
SELECT 6, 2, 'G'
UNION ALL
SELECT 7, 4, 'H'
UNION ALL
SELECT 8, 4, 'I'
UNION ALL
SELECT 9, 7, 'J'
UNION ALL
SELECT 10, 7, 'K'
UNION ALL
SELECT 11, 9, 'L'
), U AS (
SELECT B.* FROM T A JOIN T B ON B.pid = A.id JOIN T C ON C.pid = B.id WHERE A.name = 'A'
UNION ALL
SELECT P.* FROM T P JOIN U Q ON Q.id = P.pid JOIN T R ON R.pid = P.id
)
SELECT DISTINCT name FROM U
对于例如,如果您的表名为“tbl”,则:
WITH T (id, pid, name) AS (
SELECT id, pid, name FROM tbl
), U AS (
SELECT B.* FROM T A JOIN T B ON B.pid = A.id JOIN T C ON C.pid = B.id WHERE A.name = 'A'
UNION ALL
SELECT P.* FROM T P JOIN U Q ON Q.id = P.pid JOIN T R ON R.pid = P.id
)
SELECT DISTINCT name FROM U