递归选择语句

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

这应该递归完成。此外,它还应该选择另一个方向的所有记录。如果我从 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 加入他们,添加distinctnocycle 进行查询,它对我有用,但我怀疑它会更快。无论如何感谢您的评论。 啊!我没看到。那当然不行了。

以上是关于递归选择语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql递归查询语句

语句被终止。完成执行语句前已用完最大递归 100

递归中关于递归语句后面内容的执行

数据库语句的递归查询求助

C中的递归和返回语句

PostgreSQL递归查询