我有一个表,允许一个父行有多个孩子:
ID ParentID Name
1 NULL 'I am the parent'
2 1 'I am a child'
3 1 'I am another child'
4 NULL 'I am a loner'
我正在寻找一种最简单,最有效的方法,从该“家族”中的任何给定ID返回“家族”中的所有行。如果给出1、2或3,则将返回前三行;如果给出4,则仅将返回最后一行*。
如果可以的话(或者某种存储过程),我很乐意将其作为单个SQL调用,因为这将经常被调用。
我的最佳尝试导致了多次致电:
SELECT ParentID FROM Person WHERE ID = @id
/*if (parentid == null)*/
SELECT * FROM Person WHERE ID = @id OR ParentID = @id
/*else*/
SELECT * FROM Person WHERE ID = @parentid OR ParentID = @parentid
*父母本身不能拥有父母,因此不需要递归。
您需要这些OR
来找到您的家人:
SELECT * FROM Person WHERE ID = @id
OR ParentID = @id
OR ID = (SELECT ParentID FROM Person p2
WHERE ID = @id)
OR ParentID = (SELECT ParentID FROM Person p2
WHERE ID = @id)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句