从自引用表获取层次结构数据
假设您有下表:
items(item_id, item_parent)
...并且它是一个自引用表 - item_parent
引用 item_id
。
您将使用什么 SQL 查询来选择表中的所有项目及其深度,其中项目的深度是该项目的所有父项和祖父项的总和。
如果以下是表的内容:
item_id item_parent
----------- -----------
1 0
2 0
3 2
4 2
5 3
...查询应检索以下对象集:
{“item_id”:1,“深度”:0}
{"item_id":2,"深度":0}
{“item_id”:3,“深度”:1}
{“item_id”:4,“深度”:1}
{“item_id”:5,“深度”:2}
PS我正在寻找MySQL支持的方法。
Let's say you have the following table:
items(item_id, item_parent)
... and it is a self-referencing table - item_parent
refers to item_id
.
What SQL query would you use to SELECT all items in the table along with their depth where the depth of an item is the sum of all parents and grand parents of that item.
If the following is the content of the table:
item_id item_parent
----------- -----------
1 0
2 0
3 2
4 2
5 3
... the query should retrieve the following set of objects:
{"item_id":1,"depth":0}
{"item_id":2,"depth":0}
{"item_id":3,"depth":1}
{"item_id":4,"depth":1}
{"item_id":5,"depth":2}
P.S. I'm looking for a MySQL supported approach.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果数据库是 SQL 2005 / 2008 那么...
最简单的方法是使用设计为递归的 CTE(通用表表达式)。
输出如下:
您可以根据需要对其进行格式化。
If the database is SQL 2005 / 2008 then...
The easiest way to get this is using a CTE (Common Table Expression) that is designed to recurse.
The output is as follows:
From that you can format it as you wish.
Oracle 有一个非常方便的语法来检索分层数据,如下所示:
这从树的根节点开始,作为 item_parent 不存在于表中的项目作为 item_id,并选择这些节点的所有子节点,以及它们在表中的深度。树。
Oracle has a very convenient syntax for retrieving hierarchical data like this:
This starts with the root nodes of your trees as those items whose item_parent does not exist in the table as item_id, and selects all children of those nodes, along with their depth in the tree.