首页  >  文章  >  数据库  >  如何在不使用递归查询的情况下从 MySQL 中的链表检索数据?

如何在不使用递归查询的情况下从 MySQL 中的链表检索数据?

DDD
DDD原创
2024-11-01 02:31:02378浏览

How to Retrieve Data from a Linked List in MySQL Without Recursive Queries?

在 MySQL 中检索链表数据

在 MySQL 数据库中,您会遇到如下所示的表结构:

table
    id INT NOT NULL PRIMARY KEY
    data ...
    next_id INT NULL

任务是根据链表的顺序检索数据。以以下数据为例:

id next_id
1 2
2 4
3 9
4 3
9 NULL

结果应按以下顺序:1, 2, 4, 3, 9。

但是,与某些数据库(例如 Oracle 和Microsoft SQL Server、MySQL 不支持递归查询。这个问题类似于在 SQL 数据库中表示一棵树,特别是一棵细长的树。

管理这种类型的数据结构有各种解决方案:

  • [在 SQL 中表示树结构数据库](https://stackoverflow.com/questions/2321851/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tr)
  • [递归 SQL 查询](https://stackoverflow.com/questions/71469/is-it-possible-to-make-a-recursive-sql-query)

限制查询的“深度”,利用以下技术:

<code class="sql">SELECT * FROM mytable t1
 LEFT JOIN mytable t2 ON (t1.next_id = t2.id)
 LEFT JOIN mytable t3 ON (t2.next_id = t3.id)
 LEFT JOIN mytable t4 ON (t3.next_id = t4.id)
 LEFT JOIN mytable t5 ON (t4.next_id = t5.id)
 LEFT JOIN mytable t6 ON (t5.next_id = t6.id)
 LEFT JOIN mytable t7 ON (t6.next_id = t7.id)
 LEFT JOIN mytable t8 ON (t7.next_id = t8.id)
 LEFT JOIN mytable t9 ON (t8.next_id = t9.id)
 LEFT JOIN mytable t10 ON (t9.next_id = t10.id);</code>

尽管性能缓慢,但此查询为每个链接列表生成一行。

以上是如何在不使用递归查询的情况下从 MySQL 中的链表检索数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn