Bru*_*uno 8 sql sql-server select hierarchy
我有一个产品表,其中包含一个类别的FK,Categories表以每个类别可以具有父类别的方式创建,例如:
Computers
Processors
Intel
Pentium
Core 2 Duo
AMD
Athlon
Run Code Online (Sandbox Code Playgroud)
我需要做一个选择查询,如果所选类别是处理器,它将返回Intel,Pentium,Core 2 Duo,Amd等产品......
我考虑创建某种"缓存",它将为数据库中的每个类别存储层次结构中的所有类别,并在where子句中包含"IN".这是最好的解决方案吗?
对此的最佳解决方案是在数据库设计阶段.您的类别表必须是嵌套集.MySQL中管理分层数据的文章并不是特定于MySQL的(尽管有标题),并且很好地概述了在数据库表中存储层次结构的不同方法.
因此,根据您的示例,如果您的层次结构表是嵌套集,则查询将如下所示:
SELECT * FROM products
INNER JOIN categories ON categories.id = products.category_id
WHERE categories.lft > 2 and categories.rgt < 11
Run Code Online (Sandbox Code Playgroud)
2和11分别是Processors
记录的左和右.