递归选择语句
Posted
技术标签:
【中文标题】递归选择语句【英文标题】:Recursive select statement 【发布时间】:2015-04-10 08:50:57 【问题描述】:我有以下表格条目:
Col1 | Col2
------------------
3RDT | 3R9H
3R9H |
3R9J | 3RDT
3R9J | 3R9H
3HHA | 3ABC
3XXZ | 3HHA
我有一个值3R9J
。
现在我想要 Col1 具有该值的所有记录,在本例中为记录 3 和 4。
现在我获取这些记录的 Col2 值(3RDT
和 3R9H
)并将它们视为我的新 Col1 值,以获取 Col1 值 3RDT
或 3R9H
的所有记录。
这应该递归完成。此外,它还应该选择另一个方向的所有记录。如果我从 Col1 的 3RDT
开始,我得到 Col2 为 3RDT
(3) 的记录,然后我有 Col1 的 3R9J
并得到所有我有 3R9J
作为 Col1 值的记录。
我上面示例中的预期输出数据应该是前 4 条记录。
【问题讨论】:
你有没有想过尝试使用JOIN
?
请根据您的示例数据添加预期输出。另请查看带有connect-by 或recursive-query 标记的问题
CONNECT BY 是解决这个问题的最佳方法!
【参考方案1】:
如果我正确理解了您的问题,那么这个查询就可以完成这项工作。
SQLFiddle
select *
from test
connect by col1 = prior col2
start with col1 = '3R9J'
union
select *
from test
connect by prior col1 = col2
start with col1 = '3RDT';
请注意union
会导致每行显示一次。
【讨论】:
如果我省略联合,我会得到双线,这不是我想要的 @a_horse_with_no_name - 是的,但请注意connect by
有不同的条件。可以使用or
加入他们,添加distinct
和nocycle
进行查询,它对我有用,但我怀疑它会更快。无论如何感谢您的评论。
啊!我没看到。那当然不行了。以上是关于递归选择语句的主要内容,如果未能解决你的问题,请参考以下文章