首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL递归查询

问MySQL递归查询
EN

Stack Overflow用户
提问于 2021-05-19 07:49:51
回答 1查看 156关注 0票数 0

以下查询

代码语言:javascript
复制
WITH RECURSIVE cte AS
(
  SELECT id, CAST(name AS CHAR(200)) AS name, parentid, icon, url, position,
         CAST(id AS CHAR(200)) AS path,
         0 as depth
  FROM categories WHERE parentid = 46
  UNION ALL
  SELECT c.id,
         c.name,
         c.parentid,
         c.icon,
         c.url,
         c.position,
         CONCAT(cte.path,',', c.id),
         cte.depth+1
  FROM categories c JOIN cte ON
  cte.id=c.parentid
)
SELECT id, path FROM cte ORDER BY id;

这将返回两列:ID和Path。如果ID为" 52 ",则路径为" 50 , 51 ,52“,其中50和51是父母和祖父母,52是ID本身。如果没有"52“id,我如何才能得到"50,51”的结果?谢谢!

​

代码语言:javascript
复制
<table>
<thead>
<tr>
<th>ID </th>
<th>Parentid</th>
</tr>
</thead>
<tbody>
<tr><td>    46  </td><td>   0   </td></tr>
<tr><td>    47  </td><td>   46  </td></tr>
<tr><td>    48  </td><td>   46  </td></tr>
<tr><td>    49  </td><td>   46  </td></tr>
<tr><td>    50  </td><td>   46  </td></tr>
<tr><td>    51  </td><td>   50  </td></tr>
<tr><td>    52  </td><td>   51  </td></tr>
<tr><td>    53  </td><td>   47  </td></tr>
<tr><td>    54  </td><td>   47  </td></tr>
<tr><td>    55  </td><td>   47  </td></tr>
<tr><td>    56  </td><td>   48  </td></tr>
<tr><td>    57  </td><td>   51  </td></tr>
<tr><td>    58  </td><td>   49  </td></tr>
<tr><td>    60  </td><td>   50  </td></tr>
</tbody>
</table>

​

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-19 08:55:53

在构建path字段值时,您似乎正在尝试排除那些不是父ID的ID。

可以使用条件select子句获得条件WHEN。

代码语言:javascript
复制
WITH RECURSIVE cte AS
(
  SELECT id, CAST(name AS CHAR(200)) AS name, parentid, icon, url, position,
         CAST(id AS CHAR(200)) AS path,
         0 as depth
  FROM categories WHERE parentid = 46
  UNION ALL
  SELECT c.id,
         c.name,
         c.parentid,
         c.icon,
         c.url,
         c.position,
         CASE WHEN  c.id not in (select parentid from categories) THEN CONCAT(cte.path)
              ELSE  CONCAT(cte.path,',', c.id) END as path
         ,cte.depth+1
  FROM categories c 
  JOIN cte ON cte.id=c.parentid
)
SELECT id, path FROM cte ORDER BY id;

试试这个[医]小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67599013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档