一尘不染

SQL树遍历

sql

我不太确定自己是在说这种权利,但请耐心等待。

我想知道是否有可能在SQL(特别是MySQL)中做这样的事情:假设我们有树状数据保存在下表中的数据库中:

  mysql> desc data_table;
  +------------------------+---------------------+------+-----+---------+----------------+
  | Field                  | Type                | Null | Key | Default | Extra          |
  +------------------------+---------------------+------+-----+---------+----------------+
  | id                     | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
  | parent_id              | int(10) unsigned    | YES  | MUL | NULL    |                |
  | value                  | text                | YES  |     | NULL    |                |

因此,除“根”行外,每一行都有一个父级,而叶行除外,每一行都有子级。

是否可以仅使用SQL查找任何给定行的所有后代?


阅读 147

收藏
2021-03-10

共1个答案

一尘不染

可以仅使用SQL而不是在单个查询中获取所有后代。但是我敢肯定,你知道了。我假设您的意思是您想在单个查询中执行此操作。

您可能对阅读一些用于存储树结构的替代设计感兴趣,这些设计确实使您能够使用单个SQL查询来获取所有后代。请参阅我的演示文稿《使用SQL和PHP的层次数据模型》

您还可以对其他品牌的数据库(例如PostgreSQL)使用递归SQL查询,但是MySQL当前不支持此功能。

2021-03-10