如果我有一个表中以下记录:
Parent Child
1 2 <--
2 1 <--
3 2
3 4
等等
而且我想,以确定是他们的孩子都在父母的子记录他们的父母如上面箭头所示的两条记录,我将如何完成此操作?
我想在此表上运行一些递归SQL,但这些项目导致无限循环。我想识别这些项目,以便他们可以手动处理。
我的大脑从递归查询搞乱了,我没有什么可以解决这个问题了。请帮助:)
如果我有一个表中以下记录:
Parent Child
1 2 <--
2 1 <--
3 2
3 4
等等
而且我想,以确定是他们的孩子都在父母的子记录他们的父母如上面箭头所示的两条记录,我将如何完成此操作?
我想在此表上运行一些递归SQL,但这些项目导致无限循环。我想识别这些项目,以便他们可以手动处理。
我的大脑从递归查询搞乱了,我没有什么可以解决这个问题了。请帮助:)
如果将其理解你很好,你不需要递归都:
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
如果你还需要显示不满足行条件。
以下查询将在您的示例中起作用。如果需要更多,你就必须扩大示范信息
;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
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
这很容易 - 谢谢! – ChandlerPelhams
+1 - 击败我! –