gpt4 book ai didi

sql - MySQL 自连接

转载 作者:可可西里 更新时间:2023-11-01 08:08:11 24 4
gpt4 key购买 nike

我有一个表(无法更改),如下所示:

POST_ID | PARENT_ID | POST_NAME

1 | 0 | Services
4 | 1 | Development
5 | 4 | Magento
2 | 0 | Contact

字段“parent_id”引用 post_id 以形成自引用外键。是否可以编写一个查询来连接帖子及其基于 post_id 的父项?

例如,如果我有 post_id 5 (Magento),我可以编写一个查询来产生以下结果吗:

5 | Magento
4 | Development
1 | Services

我知道使用多个查询很容易做到这一点,但是,我想知道是否可以使用单个查询。

谢谢:)

最佳答案

您正在使用 adjacency list model 组织分层数据.这种递归操作困难的事实实际上是该模型的一个主要缺点。

一些 DBMS,例如 SQL Server 2005、Postgres 8.4 和 Oracle 11g,支持使用 common table expressions 的递归查询。使用 WITH 关键字(另请参阅下面的 @Quassnoi's 评论)。此功能允许轻松编写此类查询,但作为 @OMG Ponies在上面的评论中提到,MySQL 还不支持递归查询。

您提到您不能对您的表进行任何更改,但是您可以添加一个额外的表吗?如果是,您可能有兴趣查看以下描述替代模型(nested set model)的文章,它使递归操作更容易(可能):

此外,我还建议查看@Bill Karwin 的以下演示。 ,Stack Overflow 的定期贡献者:

演示文稿中描述的闭包表模型是嵌套集的一个非常有效的替代方案。他在他的 SQL Antipatterns 中进一步描述了这个模型。书 ( excerpt from the chapter on this topic [PDF]).

否则,您可能希望在应用程序中执行递归部分,下载所有数据,构建树并遍历它。

关于sql - MySQL 自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com