mysql8.0版本递归查询「建议收藏」

mysql8.0版本递归查询「建议收藏」 1.先在mysql数据库添加数据 DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` ( `id` int(11) NOT NULL, `pid`…

	mysql8.0版本递归查询[数据库教程]

1.先在mysql数据库添加数据

DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept`  (
  `id` int(11) NOT NULL,
  `pid` int(11) DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `date` datetime(0) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

— —————————-
— Records of dept
— —————————-
INSERT INTO `dept` VALUES (1, 0, ‘总部门‘, ‘2020-04-16 15:00:54‘);
INSERT INTO `dept` VALUES (2, 1, ‘课程部‘, ‘2020-04-16 15:00:57‘);
INSERT INTO `dept` VALUES (3, 1, ‘爱好部‘, ‘2020-04-16 15:01:01‘);
INSERT INTO `dept` VALUES (4, 1, ‘小吃部‘, ‘2020-04-16 15:01:03‘);
INSERT INTO `dept` VALUES (5, 2, ‘语文‘, ‘2020-04-15 15:01:07‘);
INSERT INTO `dept` VALUES (6, 3, ‘羽毛球‘, ‘2020-04-15 15:01:14‘);
INSERT INTO `dept` VALUES (7, 4, ‘臭豆腐‘, ‘2020-04-15 15:01:18‘);
INSERT INTO `dept` VALUES (8, 4, ‘鸭脖‘, ‘2020-07-11 11:21:29‘);

 

根据父级Id递归查询所有子节点(查询父级Id为0 并且分类为0的所有子节点)

WITH RECURSIVE cte AS
(
SELECT a.id, a.pid,a.name FROM dept a WHERE a.id=‘1‘
UNION ALL
SELECT k.id, k.pid,k.name FROM dept k INNER JOIN cte c ON c.id = k.pid
)SELECT id,name,pid FROM cte

 

技术图片

根据子节点查询所有父亲节点(查询子节点Id为8的所有父节点)

WITH RECURSIVE cte AS
(
SELECT a.id, a.pid,a.name FROM dept a WHERE a.id=‘8‘
UNION ALL
SELECT k.id, k.pid,k.name FROM dept k INNER JOIN cte c ON c.pid = k.id
)SELECT id,name,pid FROM cte

技术图片

 

 

 

二.sqlserver 的查询语句写法(去掉RECURSIVE即可 当然得在sqlserver数据库中添加数据 并执行语句)

 

WITH cte AS
(
SELECT a.id, a.pid,a.name FROM dept a WHERE a.id=‘4‘
UNION ALL
SELECT k.id, k.pid,k.name FROM dept k INNER JOIN cte c ON c.id = k.pid
)SELECT id,name,pid FROM cte

 

 

原文参考:https://www.cnblogs.com/liuxiaoji/p/11152094.html

 

mysql8.0版本递归查询

原文地址:https://www.cnblogs.com/atsong/p/13320754.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7370.html

(0)
上一篇 2023-03-21 14:00
下一篇 2023-03-21

相关推荐

  • SQL Server – 监控[亲测有效]

    SQL Server – 监控[亲测有效]当数据库出现性能异常时,如何找出引起性能问题的SQL? SQL Server自带trace & event只能抓取已执行完成的SQL,且无法抓取SQL运行过程中的状态信息 通过SQL Serv

    2023-03-23
    165
  • GAN网络之入门教程(三)之DCGAN原理

    GAN网络之入门教程(三)之DCGAN原理  如果说最经常被用来处理图像的网络模型,那么毋庸置疑,应该是CNN了,而本次入土教程的最终目的是做一个动漫头像生成的网络模型,因此我们可以将CNN与GAN结合,也就是组成了传说中的DCGAN网络。…

    2023-03-19
    142
  • SQL case 两种不同写法[通俗易懂]

    SQL case 两种不同写法[通俗易懂]简单的case: CASE <表达式> WHEN <值1> THEN <操作> WHEN <值2> THEN <操作> … ELSE <操作> END CASE; 其中:<表达式> 可以是任何有…

    2022-12-16
    151
  • 【Gap锁】Mysql的Gap锁在中文列下间隙怎样确定?「建议收藏」

    【Gap锁】Mysql的Gap锁在中文列下间隙怎样确定?「建议收藏」通过本文记录一次Gaplock的验证,网上大多gaplock是基于明确是数字型列来测试gaplock的,这里不再重复,随便贴个相关地址:https://www.cnblogs.com/crazylqy

    2022-12-26
    140
  • 使用scipy.io.loadmat读取MATLAB文件的方法

    使用scipy.io.loadmat读取MATLAB文件的方法对于科学计算领域的数据分析工作,MATLAB是一个广泛使用的工具。在某些情况下,Python成为第二重要的语言,可用于使用诸如Numpy和Scipy之类的库的同样任务。这就需要将MATLAB文件导入Python中。因此,使用Python中的SciPy库中的scipy.io.loadmat函数可用于读取MATLAB文件(扩展名为mat)。

    2024-04-22
    61
  • Oracle(05.14)-2

    Oracle(05.14)-21、查看用户下有多少视图 select * from user_views; 2、序列 序列是数据库对象之一,利用它可生成唯一的整数,一个序列的值是由Oracle数据库的特殊程序自动生成的,序列可以…

    2023-02-27
    142
  • Python中使用timedelta函数进行时间操作

    Python中使用timedelta函数进行时间操作在Python编程中,处理日期和时间是非常常见的操作。Python中的datetime模块提供了许多方便的函数来处理日期和时间。在datetime模块中,timedelta类提供了一些有用的方法来计算日期和时间之间的差值,或者在时间上进行加减。

    2024-04-23
    92
  • Python实现数组清空

    Python实现数组清空清空数组是一个常见的操作,当我们需要重复使用一个数组,或者需要将数组的元素全部清空时,就需要清空数组。Python是一门强大的编程语言,提供了多种方式来实现数组的清空操作。下面将会详细介绍Python中如何实现数组清空。

    2024-06-05
    52

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注