sql树形查询

sql:

使用Common As:递归公用表

https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-2017

sql:http//blog.51cto.com/tianxingzhe/1720092

/****** Script for SelectTopNRows command from SSMS  ******/

--查询某个节点上的所有父节点  如果需要过滤在where后面跟过滤条件
WITH MyTest
AS (
   --起始条件
   SELECT id,
          title,
          parent
   FROM tb_menu
   WHERE id = 44 --列出子节点查询条件
   UNION ALL --http://www.w3school.com.cn/sql/sql_union.asp
   --递归条件
   SELECT a.id,
          a.title,
          a.parent
   FROM tb_menu a
       INNER JOIN MyTest b --执行递归,这里就要理解下了
           ON a.id = b.parent)
SELECT *
FROM MyTest;

--查询父节点下面的子节点
WITH cte_child (id, title, parent, level)
AS (
   --起始条件
   SELECT id,
          title,
          parent,
          0 AS level
   FROM tb_menu
   WHERE id = 6 --列出父节点查询条件
   UNION ALL
   --递归条件
   SELECT a.id,
          a.title,
          a.parent,
          b.level + 1
   FROM tb_menu a
       INNER JOIN cte_child b
           ON (a.parent = b.id))
SELECT *
FROM cte_child;

Oracle的树形:

Oracle:https://blog.csdn.net/u014421556/article/details/51689787

Oracle树查询的最重要的就是select...start with... connect by...prior语法了。

--列出父节点的所有子节点<font></font>
SELECT *<font></font>
  FROM VD_REGIONAL vr START WITH ID = ‘0358DEF3091E6E9AE0503F0A05020A18‘ CONNECT BY vr.PARENT_ID = PRIOR vr.ID;

--列出子节点的所有父节点    不要顶级父类  [WHERE vr.PARENT_ID!=‘0‘]<font></font>
SELECT *
  FROM VD_REGIONAL vr  START WITH ID = ‘2c90898b63f968f40163fc31b37c08d3‘ CONNECT BY vr.ID = PRIOR vr.PARENT_ID;
  --条件筛选
  SELECT *
  FROM VD_REGIONAL vr  WHERE vr.PARENT_ID!=‘0‘ START WITH ID = ‘2c90898b63f968f40163fc31b37c08d3‘ CONNECT BY vr.ID = PRIOR vr.PARENT_ID;

原文地址:https://www.cnblogs.com/Sea1ee/p/10306800.html

时间: 2024-10-04 03:23:23

sql树形查询的相关文章

树形查询扩展

数据库环境:SQL SERVER 2005 有一层次表的数据如下图1,要实现图2的效果,即将层次结构的路径按行显示, 第一列显示的是叶子节点,后面则是分枝节点,最后是根节点.          要解决的问题: 1.递归实现树形查询 2.从根节点到叶子节点编成一组 3.动态行转列 好了,我们依次来解决这些问题. 0.建表,导入基础数据 WITH x0 AS( SELECT 1 AS id,'1xx' AS name,2 AS fatherID UNION ALL SELECT 2 AS id,'2

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

8.mybatis动态SQL模糊查询 (多参数查询,使用parameterType)

多参数查询,使用parameterType.实例: 用户User[id, name, age] 1.mysql建表并插入数据 2.Java实体类 public class User { public User() { } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } private int id; private String name;

【转自mos文章】使用单条sql来查询出awr中的syatem statistics

使用单条sql来查询出awr中的syatem statistics 参考自: How to monitor system statistics from AWR snapshot by single SQL? (Doc ID 1320445.1) 适用于: Oracle Server - Enterprise Edition - Version: 10.2.0.1 and later   [Release: 10.2 and later ] Information in this documen

SQL数据库查询方法

SQL数据库查询方法 简单查询: 一.投影 select * from 表名 select 列1,列2... from 表名 select distinct 列名 from 表名 二.筛选 select top 数字 列|* from 表名 (一)等值与不等值 select * from 表名 where 列名=值 select * from 表名 where 列名!=值 select * from 表名 where 列名>值 select * from 表名 where 列名<值 selec

sql语句查询后几行数据并倒着排列

$conn = mysql_connect("数据库地址","用户名","密码"); if(!$conn) { die("mysql conn failed"); } else{ mysql_query("SET NAMES 'utf8'"); mysql_select_db("数据表",$conn); if(!$conn) { die("database selected f

sql连接查询中on筛选与where筛选的区别

sql连接查询中on筛选与where筛选的区别 sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能. 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏. 就拿比普通增删查改稍微复杂一个层次的连接查询来说, 盲目使用, 也会出现意料之外的危险结果,导致程序出现莫名其妙的BUG. 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,  在我们编写查询的时候, 筛选条件的放置不管是在o

Hibernate原生sql的查询,返回结果设置到DTO

原生sql的查询,返回结果设置到DTO: Query query = sessionFactoryRtData.getCurrentSession().createSQLQuery(hql.toString()).setResultTransformer(Transformers.aliasToBean(RTDataAttrDto.class));

[转]SQL 模糊查询

在进行数据库查询时,有完整查询和模糊查询之分. 一般模糊查询语句如下: SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式: 1,% :表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需