2011-09-23 266 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