我有以下自引用表。注意:此表已针对此问题进行了大大简化,此表中有数千行。
TABLE_A
--------------------------------
ID TABLE_A_ID TITLE
--------------------------------
1 null base_1
2 1 title_2
3 2 title_3
4 null base_4
5 4 title_5
6 5 title_6
7 6 title_7
8 null base_8
9 8 title_9
我的场景是我需要检索一行但是标题必须包含所有父行的详细信息,所以如果我试图返回ID为3,7和9的行,我需要以下
-----------------------------------
ID TITLE
-----------------------------------
3 base_1, title_2, title_3
7 base_4, title_5, title_6, title_7
9 base_8, title_9
我看过使用GROUP_CONCAT,但这似乎不是正确的方法。有什么想法吗?
答案 0 :(得分:0)
这可以通过编写一个自定义函数来完成,该函数通过提供的ID检索/循环,直到它到达基数并返回连接的字符串。
Name: GetAllTitles
Input: InputID
Steps: `While ID <> null
{
select TABLE_A_ID,title from table where ID='InputID';
If TABLE_A_ID is not null then,
{
// Save title to temp
// Save TABLE_A_ID to InputID
return CONCAT(temp,GetAllTitles(InputID));
}
else { return emptystring;
}
}`
最终SQL查询将是: 从表A中选择ID,GetAllTitles(ID)