我有一个表,允许父行有多个孩子:选择父母和所有的孩子要么给家长或孩子的ID
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
* 父母本身不能有一个父类,所以应该不需要递归。
有什么错你的第二个查询? http://sqlfiddle.com/#!6/5f39c/2/0它似乎返回你想要的。 –
@TimSchmelter,因为如果@ id = 2或@id = 3,所有三行都需要返回 – snumpy