在SQL中寻找无限关系

在SQL中寻找无限关系,sql,oracle,Sql,Oracle,假设我有一张这样的桌子: Child | Parent 并将相同的数据放入使用数字来标识每个子级父级,如下所示: Child | Parent --------------- 1 2 2 1 3 4 5 4 前两行形成一种无限关系,如2是1的父级,但1也是2的父级,因此搜索父级是一个永无止境的循环。 如何在SQL中找到具有这种关系的所有行? 我在想我必须使用 START WITH and CONNECT BY 但是,如果您无法完成要运行的查询,请提供

假设我有一张这样的桌子:

Child | Parent
并将相同的数据放入使用数字来标识每个子级父级,如下所示:

Child | Parent
---------------
1      2
2      1
3      4
5      4
前两行形成一种无限关系,如2是1的父级,但1也是2的父级,因此搜索父级是一个永无止境的循环。 如何在SQL中找到具有这种关系的所有行? 我在想我必须使用

START WITH and CONNECT BY

但是,如果您无法完成要运行的查询,请提供任何帮助,我们将不胜感激

对同一个表的简单内部联接是否不能满足您的需要

SELECT table1.Parent as Row, table1.Child as OtherRow
FROM table table1
    inner join table table2
    ON table1.Parent = table2.Child
    AND table1.Child = table2.Parent
这将为每个匹配提供“父->子”行,如下所示:

Row | OtherRow
----|----------
  1 |  2
但是,您可以将结果用作子查询来提取所有行

乙二醇

这会给你

Parent | Child
-------|------
   1   |   2
   2   |   1

您可以将NOCYCLE选项与伪列CONNECT_BY_ISCYCLE一起使用

编写分层查询时,它会因为该循环而失败。然后添加NOCYCLE选项并将_BY_ISCYCLE列连接到select子句,它将帮助您识别循环

这里有一个很好的例子:


向我们展示您迄今为止所写的内容。(即使是任何不起作用的东西。)
Parent | Child
-------|------
   1   |   2
   2   |   1