常见问题,给一个记录ID,查出它的所有父级,直到顶级

使用SMSS,sql server,找到一个办法.

思路是分两步,先循环找到所有父级的ID,再用IN查出所有父级

列说明  ID=PK  ParentId = 上级ID  ParentId = 0 表示到顶级了

SQL语句 :

DECLARE @childrenId VARCHAR(32)     -- 要查找这个ID的所有父级
DECLARE @1parentIds VARCHAR(max) -- 所有父级的ID列表,最终拼成IN的条件.效果如: '111','222','333'

SET @1parentIds = ''''+@childrenId+''''      -- 也包含自己,一直到父级

WHILE @childrenId!='0'         -- 如果父级ID不是0就继续查找
BEGIN
  SELECT @childrenId = ParentId FROM [table] WHERE  Id=@childrenId -- 根据ID找到这个记录,将它的父ID赋值,这个父ID作为下一级的子ID查找
  SET @1parentIds= @1parentIds + ',' + '''' + @childrenId + ''''                    -- 拼接这个父ID
END

-- 由于拼接的字符串不能做IN的参数,所以想这个办法将整个SQL拼成再执行之.

EXEC('SELECT * FROM [table] WHERE Id IN (' + @1parentIds + ')'+'ORDER by Id')

sql 语句查所有父级的更多相关文章

  1. Mysql 根据id查所有父级或子级

    mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到) 由于mysql 不支持类似 oracle with ...connect的 递归查询语法 之前一直以为类似的查询要么用存储 ...

  2. SQL语句查数据库中某一列是否有重复项

    Select 列名,COUNT(列名)FROM 表名GROUP BY 列名HAVING COUNT( 列名 ) 〉1

  3. 怎么用SQL语句查数据库中某一列是否有重复项

    SELECT 某一列, COUNT( 某一列 ) FROM 表 GROUP BY 某一列 HAVING COUNT( 某一列 ) 〉1 这样查询出来的结果, 就是 有重复, 而且 重复的数量.

  4. sql语句not in判断条件注意事项

    sql语句not in判断条件注意事项 问题描述:mysql数据库,存在两个表org表和kdorg表,用于存储组织信息.现在我需要从org表找出组织,条件为该组织不在kdorg表里. sql语句:se ...

  5. [20190328]简单探究sql语句相关mutexes.txt

    [20190328]简单探究sql语句相关mutexes.txt --//摘要:http://www.askmaclean.com/archives/understanding-oracle-mute ...

  6. 用sql语句查出和sql相关的性能计数器

    一台服务器上,用性能监视器死活显示不出来一部分计数器,没办法,用sql语句查了 --所有和sql相关的计数器 select * from sys.dm_os_performance_counters ...

  7. 数据库、MySQL下载与安装、基本SQL语句

    数据演变史 # 1.单独的文本文件 没有固定的存放位置 没有固定的数据格式 '''程序彼此无法兼容 没有统一的标准''' # 2.软件开发目录规范 按照文件功能的不同规定了相应的位置 '''文件查找变 ...

  8. [经典SQL语句]根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回

    树形表结构: id parentID isDel 1 0 0 2 1 0 3 1 1 4 2 0 5 2 0 一)根据父级ID查找所有子级ID,并将所有ID用逗号隔开返回 ID=,需要返回的结果(条件 ...

  9. SQL Server T—SQL 语句【查】

    一 查询数据(关键字:select) (1)简单查询        select * from 表名                    ——查全表 select 列名 from 表名 select ...

随机推荐

  1. 异常:fatal: unable to access 'https://git.oschina.net/pcmpcs/library.git/': Could not resolve host

    git  fork项目时出现的异常. 原因: 我以前用的是ssh地址做的远程通信地址,而这次是用的是https,因为很久没用,所以忘记了以前是用ssh的了.解决方案一:复制ssh协议的地址,然后再关联 ...

  2. Eclipse External Tool Configration Notepad++

    Location: C:\Program Files\Notepad++\notepad++.exe Arguments: ${resource_loc}

  3. VS2008引入头文件包含目录和lib库目录

    全局级别的引入 为VS所有项目设置包含目录和库目录,对所有项目都有效 如下图所示:工具-选项-项目和解决方案-VC++目录-包含文件:在此添加头文件目录即可 工具-选项-项目和解决方案-VC++目录- ...

  4. b,B,KB,MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB的含义,之间的关系

    1bit=1位2进制信息 1B (byte 字节)1KB(Kilobyte 千字节)=2(10)B=1024B=2(10)B: 1MB(Megabyte 兆字节)=2(10)KB=1024KB=2(2 ...

  5. js创建并下载文件

    先上代码: function createAndDownloadFile(fileName, content) { var aTag = document.createElement('a'); va ...

  6. array_filter与array_map

    php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,functio ...

  7. MySQL unknown variable 'default-character-set=utf8'的解决

    Windows07 安装了MySQL-server-5.5,直接在命令行输入net start mysql ,启动mysql成功, 然后修改/MySQL Server 5.5/my.ini,增加了de ...

  8. pojo类自动生成序列化ID

    自动生成序列化ID

  9. AngularJS 中的 factory、 service 和 provider区别,简单易懂

    转自:http://blog.csdn.net/ywl570717586/article/details/51306176 初学 AngularJS 时, 肯定会对其提供 factory . serv ...

  10. 2017年前小纪(有关http的一些缓存理论知识)

    position的top和bottom的区别:前者基准点定在top,后者基准点定在bottom. for-in 遍历属性的顺序不确定 手机端,line-height对光标大小非常有影响 有些css3属 ...