用于层次关系的SQL

Noo*_*oor 5 mysql sql

我有一张表,根据树状结构等层次关系对产品进行分类.我必须在任何级别选择一个类别和所有子类别.见下图:

在此输入图像描述

例如,我想要一个sql语句,当我查询传递id = 11时,它返回我(19,20,21,22,23,24,25,26)

Mar*_*ers 9

有几种不同的方法可以在MySQL中存储heirarchical数据.查看Bill Karwin的演示文稿,演示了四种选择.

  • 邻接清单
  • 路径枚举
  • 嵌套集
  • 关闭表

您正在使用邻接列表模型来存储层次数据,但不幸的是,这是您可以选择查询子树的最难模型.

嵌套集查询子树

你的选择是:

  • 更改为其他型号.
  • 将查询限制为n级深度.
  • 使用存储过程递归查询.有关此内容的更多信息,请参阅Quassnoi的系列文章 - MySQL中的分层查询.


Oza*_*ray 1

SELECT * FROM `Products` 
WHERE parentId IN (
    SELECT id FROM `Products` 
    WHERE parentId = 11)
Run Code Online (Sandbox Code Playgroud)

注意:如果您的层次结构深于 2 层,则此方法将不起作用。