我有一个SQLite表,它的结构类似于以下内容:
| ID|类型|父ID|
| --------------|--------------|--------------|
| 一千|A|一千零五十|
| 一千零一|B|一零六七|
| 一千零二||一千|
| 一千零三|C|一千一百|
| 一千零四|B|一三七八|
| 一千零五||一千零二|
| 一千零六|||
我需要创建一个SQL查询,返回所有使用PARENT_ID填充TYPE列的记录,其中TYPE列为空,忽略那些没有PARENT_ID的记录。结果应该如下所示:
| ID|类型|父ID|
| --------------|--------------|--------------|
| 一千|A|一千零五十|
| 一千零一|B|一零六七|
| 一千零二|A|一千|
| 一千零三|C|一千一百|
| 一千零四|B|一三七八|
| 一千零五|A|一千零二|
| 一千零六|||
您将注意到,对于ID 1005,SQL查询将需要使用PARENT_ID进行递归查询,以最终从ID为1000的记录中检索TYPE值A。
我假设SQL中的递归函数将有助于满足此要求,但由于我以前没有使用过递归SQL,因此需要一些帮助来构建SQL查询。
任何帮助将不胜感激。
1条答案
按热度按时间owfi6suc1#
您可以使用递归CTE来实现。
递归CTE不会返回任何没有parent_id的记录,因此我们可以简单地使用
union all
添加它们Demo here