我有一個表,允許父行有多個孩子:選擇父母和所有的孩子要麼給家長或孩子的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