我正在尝试创建一个select语句,它将根据“LINK_SEQUENCE”列返回所有链接的行。但是,该列仅将两行链接在一起。将这两者结合起来的简单查询对我来说非常有意义。但是,如果“链”中存在三个或更多链接,我想确保返回所有代码。
如果只处理查询中的一个代码,我将如何返回类似于此的内容? EX:3245。
不确定在这种情况下是否重要,但这适用于Oracle数据库。非常感谢你们!
来自SQL Fiddle的源数据:
ID CODE LINK_SEQUENCE NAME
1 3267 1 Potato
2 3245 1 Potato
3 3245 2 Potato
4 3975 2 Potato
5 3975 3 Potato
6 5478 3 Potato
7 2368 4 Apricot
8 4748 4 Apricot
9 8957 (null) Carrot
答案 0 :(得分:1)
SELECT * FROM LinkedTable lt
WHERE ft.link_sequence IN
( SELECT link_sequence FROM LinkedTable WHERE code = 3245 AND link_sequence IS NOT NULL )
ORDER BY ft.ID;
查看我的SQL Fiddle DEMO。
第二次尝试:
SELECT DISTINCT *
FROM LinkedTable
START WITH code = 3245
CONNECT BY NOCYCLE
PRIOR code = code AND PRIOR link_sequence+1 = link_sequence OR
PRIOR code <> code AND PRIOR link_sequence = link_sequence
ORDER BY link_sequence, code
;
使用此代码更新了SQL Fiddle。 请尝试打破它。
根据您的数据(从3245
开始),它提供以下链:
ID CODE LINK_SEQUENCE NAME
2 3245 1 Potato
1 3267 1 Potato
3 3245 2 Potato
4 3975 2 Potato
5 3975 3 Potato
6 5478 3 Potato