常见问题,给一个记录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. CodeForces Round #529 Div.3

    http://codeforces.com/contest/1095 A. Repeating Cipher #include <bits/stdc++.h> using namespac ...

  2. Linux 典型应用之WebServer 安装和配置

    Apache的基本操作 安装 yum install httpd 启动 service httpd start  在浏览器中输入以下Ip 发现无法访问 http://192.168.1.109/ 输入 ...

  3. [官网]How to use distributed transactions with SQL Server on Docker

    How to use distributed transactions with SQL Server on Docker https://docs.microsoft.com/en-us/sql/l ...

  4. 本地上传项目到github

    https://www.cnblogs.com/rosej/p/6056467.html(copy)

  5. Python cmd库的简易使用

    简单记录一下,竟然这么简单的方法就能在 python 里面实现一个简单的交互式命令行以前从来没有尝试过. 上一个完整的例子: import cmd import osimport readline r ...

  6. React Native & debug & debugger

    React Native & debug & debugger http://localhost:8081/debugger-ui/ react-devtools # yarn: $ ...

  7. 规范化Normalization

    一.批规范化 Batch Normalization 转自: http://blog.csdn.net/hjimce/article/details/50866313    https://zhuan ...

  8. Python——FTP上传和下载

    一.FTP对象方法说明 login(user='anonymous',passwd='', acct='') 登录 FTP 服务器,所有参数都是可选的 pwd() 获得当前工作目录 cwd(path) ...

  9. Python——Flask框架——程序的基本结构

    一.安装 pip install flask 二.初始化 from flask import Flask app = Flash(__name__) 三.路由:处理URL和函数之间的关系的程序称为路由 ...

  10. LODOP循环多任务 同模版只设置不同队列任务名

    LODOP中从PRINT_INIT(或PRINT_INITA)到最后PRINT(或PREVIEW等),是一个任务,关于Lodop中一个任务,以及一个任务中可以包含哪些语句,详细可查看本博客另一篇博文: ...