O_O
如果我在表格中有以下记录:
Parent Child
1 2 <--
2 1 <--
3 2
3 4
等...
我想识别他们孩子的父母和他们父母的孩子的记录,例如上面箭头标识的2条记录,我将如何做到这一点?
我试图在这个表上运行一些递归SQL,但这些项导致无限循环。我想识别这些项目,以便手动解决。
我的大脑因为弄乱递归查询已经足够了,我没有什么可以解决这个问题。请帮助:)
答案 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