SQL - 显示递归关系中的所有父项



我有一个类别表。这具有递归关系,因此一个类别可以成为另一个类别的子类别。该表如下所示:

id  name    short_desc  long_desc   tag_id  parent_id

我写了简单的让 sql 找到所有 1 级类别:

 SELECT * FROM category WHERE parent_id =0

然后我写了一个查询来获取所有 2 级类别(父类别没有父类别(

SELECT * FROM category WHERE parent_id IN (SELECT id FROM category WHERE parent_id =0)

我想做的是生成一个列,其中显示所有类别数据和任何相关的父类别。

逻辑上是这样的:

  1. 从类别中选择全部
  2. 如果 parent_id != 0,则将父项添加为新行
  3. 重复 2,直到所有父母都被计算在内。

结果应如下所示:

id  name    short_desc  long_desc   tag_id   parent_name  parent_name_2

如果parent_name为 null/空,则parent_name应保持为空。 如果字段中有parent_name ID,请检查是否存在parent_name_2,如果是,则填充两列,如果没有,则仅填充parent_name。

确实可以选择用jquery或php进行编码,我很清楚该怎么做。但是,我确信我可以从一个好的SQL查询中获取所需的数据。

任何帮助将不胜感激。

亲切问候

缺口

下面是使用多个外部联接的一个选项:

select c.*, 
  case when c2.id is not null then c2.name end parent_name,
  case when c3.id is not null then c3.name end parent_name_2
from category c
  left join category c2 on c.parent_id = c2.id
  left join category c3 on c2.parent_id = c3.id
  • SQL 小提琴演示

相关内容

  • 没有找到相关文章

最新更新