栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查找嵌套集的面包屑

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查找嵌套集的面包屑

我最终要做的是建立一个大型联接,该联接简单地将此表与其自身联系起来,遍及每个级别。

首先,我只在第一个级别组中填充表@topLevelGroups(如果您只有一个根,则可以跳过此步骤),然后在@userGroups中填充用户可以看到的组。

SELECt groupid,   (level1     + CASE WHEN level2 IS NOT NULL THEN ' > ' + level2 ELSE '' END    + CASE WHEN level3 IS NOT NULL THEN ' > ' + level3 ELSE '' END   )as [breadcrumb]FROM (  SELECt g3.*    ,g1.name as level1    ,g2.name as level2    ,g3.name as level3  FROM @topLevelGroups g1  INNER JOIN @userGroups g2 ON g2.parentid = g1.groupid and g2.groupid <> g1.groupid  INNER JOIN @userGroups g3 ON g3.parentid = g2.groupid  UNIOn  SELECt g2.*    ,g1.name as level1    ,g2.name as level2    ,NULL as level3  FROM @topLevelGroups g1   INNER JOIN @userGroups g2 ON g2.parentid = g1.groupid and g2.groupid <> g1.groupid  UNIOn  SELECt g1.*    ,g1.name as level1    ,NULL as level2    ,NULL as level3   FROM @topLevelGroups g1) aORDER BY [breadcrumb]

这是一个相当大的技巧,并且显然仅限于一定数量的级别(对于我的应用程序,我可以选择一个合理的限制),问题是,支持的级别越多,联接的数量就成倍增加,因此速度要慢得多。

在代码中执行此操作肯定更容易,但是对我而言,这并非总是一种选择-有时我需要直接从SQL查询中获得此功能。


我接受这作为答案,因为这是我最终要做的,并且可能对其他人有用-但是,如果有人可以提出一种更有效的方法,我将其更改为他们。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号