父子sql查询
id parent_id
1 0
2 0
3 2
4 0
5 1
6 0
我需要一个查询,该查询将返回父行(parent_id=0),后跟其子行:
- 第一个父级
- 第一个父级的所有子级
- 第二个父级第二
- 个父级的所有子级
- 第三个父级
- 第四个父级
预期结果:按 id 排序
id parent_id
-------------------------------------------
1 0 (first parent)
5 1 (all children of first parent)
2 0 second parent
3 2 (all children of second parent)
4 0 third parent
6 0 fourth parent
我可以使用父级的并集所有孩子都跟着 但这首先给了我父母,然后是孩子。 我需要父母,并且立即需要它的孩子。
有人可以帮忙吗?
id parent_id
1 0
2 0
3 2
4 0
5 1
6 0
I need a query that will return parent rows (parent_id=0) followed by its child rows:
- first parent
- all children of first parent
- second parent
- all children of second parent
- third parent
- fourth parent
Expected result: ordered by id
id parent_id
-------------------------------------------
1 0 (first parent)
5 1 (all children of first parent)
2 0 second parent
3 2 (all children of second parent)
4 0 third parent
6 0 fourth parent
I can use union of parents followed by all childs
But that gives me parents first then the children.
I need parent and immediately its children.
Anyone can help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您使用的是 SQL Server 2005+,则可以使用递归 CTE,确保维护一个可以在最后进行排序的字段。
试试这个:
If you're in SQL Server 2005+, you can use a recursive CTE, making sure that you maintain a field that you can order by at the end.
Try this:
这可以使用两个临时表和三个变量来完成。
This can be accomplished using two temp tables and three variables.