我有一个表,它允许父行有多个子行:
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
*父级本身不能有父级,因此不需要递归。