【问题标题】: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 值(3RDT3R9H)并将它们视为我的新 Col1 值,以获取 Col1 值 3RDT3R9H 的所有记录。

这应该递归完成。此外,它还应该选择另一个方向的所有记录。如果我从 Col1 的 3RDT 开始,我得到 Col2 为 3RDT (3) 的记录,然后我有 Col1 的 3R9J 并得到所有我有 3R9J 作为 Col1 值的记录。

我上面示例中的预期输出数据应该是前 4 条记录。

【问题讨论】:

  • 你有没有想过尝试使用JOIN
  • 请根据您的示例数据添加预期输出。另请查看带有connect-byrecursive-query 标记的问题
  • CONNECT BY 是解决这个问题的最佳方法!

标签: sql oracle recursive-query


【解决方案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 加入他们,添加distinctnocycle 进行查询,它对我有用,但我怀疑它会更快。无论如何感谢您的评论。
  • 啊!我没看到。那当然不行了。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 2013-01-17
相关资源
最近更新 更多