2011-09-23 89 views
3

O_O查询SQL查询以查找父 - 子 - 子 - 父关系?

如果我有一个表中以下记录:

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

等等

而且我想,以确定是他们的孩子都在父母的子记录他们的父母如上面箭头所示的两条记录,我将如何完成此操作?

我想在此表上运行一些递归SQL,但这些项目导致无限循环。我想识别这些项目,以便他们可以手动处理。

我的大脑从递归查询搞乱了,我没有什么可以解决这个问题了。请帮助:)

回答

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如果你还需要显示不满足行条件。

+0

这很容易 - 谢谢! – ChandlerPelhams

+0

+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 
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