如何使用连接从两个表中选择层次记录

问题描述 投票:0回答:1

实际上,我想从两个表中选择匹配的记录,并从第一个表中选择分层数据

我有两个表:

  1. 具有列(id(pk),类别名称,父代ID)的类别表。我在其中存储分层数据。

  2. 具有列(id(pk),项目名称,category_id(fk))的类别项目。项目表中的category_id字段引用类别表的id字段

this is a category table with hierarchical categories

enter image description here

items table with category_ref_ids as fk refrances category(id) column

enter image description here

SELECT DISTINCT ct.category_name,ct.category_refid,ct.parent_ref_id
from tmpos.tmpos_category ct
JOIN tmpos.tmpos_menu_child tmc
ON ct.category_refid = tmc.category_ref_ids

现在我的问题是,当我加入类别表和项目表时,我将获得所有不同的匹配类别,但我还希望选择类别父记录

sql join hierarchy
1个回答
0
投票

因此,当将此模式与parent_ref_id上的category table一起使用时,将很难向上移动层次结构并获得所有祖先类别,而不用编写每个父代的硬代码1加入的查询。

[如果您只打算生育2或3代(例如,孩子,父母,祖父母),那么这可以,但是如果使用更多(或可变级别),则可能会变得凌乱。一种解决方案是使用“递归语法”,但据我所知并不是所有的SQL实现都支持它。

Bill Karwin有一个出色的幻灯片,详细介绍了架构的优点/缺点(通常称为“邻接列表”。]

您可以在幻灯片6-17上找到它:

https://www.slideshare.net/billkarwin/models-for-hierarchical-data

他相当详细地描述了您的问题,并且如果最终对当前架构有问题,则提供了其他几种建模层次结构的策略。我个人喜欢该平台中最后一个详细的表,称为“封闭表”]

编辑

如果您实际上仅尝试包括一个或两个父级,那么您的查询将与连接3个或更多表的查询非常相似,只需要将categories表连接到自身即可。如果您用Google搜索“将表本身连接起来”或类似的内容,应该很容易找到此类示例。

© www.soinside.com 2019 - 2024. All rights reserved.