SQL Query查找Parent-Child Child-Parent关系?

时间:2011-09-23 21:56:48

标签: sql sql-server

O_O

如果我在表格中有以下记录:

Parent     Child
1          2 <--
2          1 <--
3          2
3          4

等...

我想识别他们孩子的父母和他们父母的孩子的记录,例如上面箭头标识的2条记录,我将如何做到这一点?

我试图在这个表上运行一些递归SQL,但这些项导致无限循环。我想识别这些项目,以便手动解决。

我的大脑因为弄乱递归查询已经足够了,我没有什么可以解决这个问题。请帮助:)

3 个答案:

答案 0 :(得分:6)

如果你理解得很好,你根本不需要递归:

 SELECT a.parent, a.child
 FROM table1 a
 INNER JOIN table1 b ON (b.child=a.parent and a.child = b.parent)

如果您还需要显示不满足条件的行,则可能需要使用LEFT JOIN而不是INNER

答案 1 :(得分:2)

以下查询将适用于您的示例案例。如果它需要更多,你将不得不扩展演示信息

;WITH CTE_DATA AS (
    Select Parent = 1, Child = 2
    union Select Parent = 2, Child = 1
    union Select Parent = 3, CHild = 2
    union Select Parent = 3, Child = 4
)
select 
    d1.*
from
    CTE_DATA d1
    join CTE_DATA d2 on d1.Child = d2.Parent and d2.Child = d1.Parent

答案 2 :(得分:1)

DECLARE @YourTable TABLE (Parent INT, Child INT)

INSERT INTO @YourTable
SELECT 1, 2
UNION
SELECT 2, 1
UNION
SELECT 3, 2
UNION
SELECT 3, 4


SELECT *
FROM @YourTable A
INNER JOIN @YourTable B
ON A.Parent = B.Child AND A.Child = B.Parent