SQL:在Select中基于数据链链接表中的多行

时间:2013-09-13 02:42:43

标签: sql oracle join

我正在尝试创建一个select语句,它将根据“LINK_SEQUENCE”列返回所有链接的行。但是,该列仅将两行链接在一起。将这两者结合起来的简单查询对我来说非常有意义。但是,如果“链”中存在三个或更多链接,我想确保返回所有代码。

Table Data

如果只处理查询中的一个代码,我将如何返回类似于此的内容? EX:3245。

Output Query

不确定在这种情况下是否重要,但这适用于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

1 个答案:

答案 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