詳解MySQL中的遞歸查詢

MySQL中的遞歸查詢主要通過WITH RECURSIVE語句來實現,這在處理具有層級關系或樹形結構的數據時非常有用。下面將通過一個具體的例子來詳細解釋如何在MySQL中使用遞歸查詢。

示例場景

假設我們有一個部門表(departments),其中包含部門的ID、部門名稱以及上級部門的ID(parent_id)。現在,我們想要查詢出某個部門及其所有下級部門的名稱。

表結構
CREATE TABLE departments (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,parent_id INT,FOREIGN KEY (parent_id) REFERENCES departments(id)
);
插入數據
INSERT INTO departments (name, parent_id) VALUES ('總公司', NULL);
INSERT INTO departments (name, parent_id) VALUES ('技術部', 1);
INSERT INTO departments (name, parent_id) VALUES ('人事部', 1);
INSERT INTO departments (name, parent_id) VALUES ('前端開發', 2);
INSERT INTO departments (name, parent_id) VALUES ('后端開發', 2);
INSERT INTO departments (name, parent_id) VALUES ('UI設計', 2);

最終表如下圖:
在這里插入圖片描述

遞歸查詢

現在,如果我們想要查詢出“技術部”及其所有下級部門的名稱,可以使用以下SQL語句:

WITH RECURSIVE SubDeps AS (-- 初始查詢,選擇頂級部門(技術部)SELECT id, name, parent_idFROM departmentsWHERE name = '技術部'UNION ALL-- 遞歸查詢,從當前已知部門中繼續查詢它們的下級部門SELECT d.id, d.name, d.parent_idFROM departments dINNER JOIN SubDeps sd ON d.parent_id = sd.id
)
SELECT * FROM SubDeps;

查詢結果如下圖:
在這里插入圖片描述

解釋
  1. WITH RECURSIVE:這個語句開始了一個遞歸的公用表表達式(Common Table Expression, CTE)。
  2. SubDeps:這是CTE的名稱,在遞歸查詢中我們可以引用它。
  3. 初始查詢:首先,我們從departments表中選擇出頂級部門(這里是“技術部”)。
  4. UNION ALL:我們使用UNION ALL來合并初始查詢的結果和遞歸查詢的結果。UNION ALL允許重復的行,如果確定不會有重復,也可以使用UNION(但在這個例子中,由于我們可能查詢出多個層級的相同部門,所以使用UNION ALL)。
  5. 遞歸查詢:在遞歸查詢中,我們從departments表中再次選擇數據,但這次我們選擇的是那些其parent_id等于CTE中當前行的id的行。這樣,我們就能找到所有下級部門。
  6. SELECT * FROM SubDeps:最后,我們從CTE中選擇所有結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45597.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

昇思訓練營打卡第二十五天(RNN實現情感分類)

RNN,即循環神經網絡(Recurrent Neural Network),是一種深度學習模型,特別適用于處理序列數據。以下是對RNN的簡要介紹: RNN的特點: 記憶性:與傳統的前饋神經網絡不同,R…

老板新招的牛人,竟然用1天搭建了一套完整的倉庫管理系統!

倉儲管理系統是什么? 倉儲管理系統(WMS)是一個全面的軟件解決方案,旨在幫助企業優化倉庫管理流程、管理和控制日常倉庫運營。通過數學模型和信息手段,對倉庫管理的各個環節進行優化和調控,涵蓋了從貨物入庫…

使用網關和Spring Security進行認證和授權

個人名片 🎓作者簡介:java領域優質創作者 🌐個人主頁:碼農阿豪 📞工作室:新空間代碼工作室(提供各種軟件服務) 💌個人郵箱:[2435024119qq.com] &#x1f4f1…

jquery發送jsonp請求

使用 jQuery 發送 JSONP 請求相對來說比較簡單,以下是示例代碼: $.ajax({url: "http://example.com/data",dataType: "jsonp",jsonp: "callback",jsonpCallback: "myCallback" }).done(function(response) {//…

Linux命令更新-sort 和 uniq 命令

簡介 sort 和 uniq 都是 Linux 系統中常用的文本處理命令。 sort 命令用于對文件內容進行排序。 uniq 命令用于去除文件中重復出現的行。 1. sort 命令 命令格式 sort [選項] [文件]選項: -n: 按照數字進行排序 -r: 反向排序 -c: 統計每個元素出現的次數 -…

怎么錄制視頻?電腦錄制,試試這3種方法

在數字化快速發展的時代,視頻已經成為我們傳遞信息、分享生活、表達情感的重要載體。每一個人都希望自己能夠掌握視頻錄制技巧,輕松駕馭影像的力量,創造出屬于自己的視覺盛宴。 那么,怎么錄制視頻呢?首先選擇一款好用…

vue腳手架配置代理請求

在 Vue 腳手架中,可以通過配置vue.config.js文件來設置代理請求,以解決跨域問題或實現其他代理需求。以下是兩種常見的配置方式: 方法一: 在vue.config.js中添加如下配置: module.exports {devServer: {proxy: http…

《信息與電腦(理論版)》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

問題解答 問:《信息與電腦(理論版)》是不是核心期刊? 答:不是,是知網收錄的正規學術期刊。 問:《信息與電腦(理論版)》級別? 答:省級。主管單位:北京電子控股有限責任公司 主辦…

AI安全入門-人工智能數據與模型安全

參考 人工智能數據與模型安全 from 復旦大學視覺與學習實驗室 文章目錄 0. 計算機安全學術知名公眾號1. 概述數據安全模型安全 3. 人工智能安全基礎3.1 基本概念攻擊者攻擊方法受害者受害數據受害模型防御者防御方法威脅模型目標數據替代數據替代模型 3.2 威脅模型3.2.1 白盒威…

實踐致知第16享:設置Word中某一頁橫著的效果及操作

一、背景需求 小姑電話說:現在有個word文檔,里面有個表格太長(如下圖所示),希望這一個設置成橫的,其余頁還是保持豎的! 二、解決方案 1、將鼠標放置在該頁的最前面閃爍,然后選擇“頁面”》“↘…

Python面經

文章目錄 Python基本概念1. Python是**解釋型**語言還是**編譯型**語言2. Python是**面向對象**語言還是面向過程語言3. Python基本數據類型4.append和 extend區別5.del、pop和remove區別6. sort和sorted區別介紹一下Python 中的字符串編碼is 和 的區別*arg 和**kwarg作用淺拷…

Electron 進程間通信

文章目錄 渲染進程到主進程(單向)渲染進程到主進程(雙向)主進程到渲染進程 (單向,可模擬雙向) 渲染進程到主進程(單向) send (render 發送)on &a…

【Stable Diffusion】(基礎篇三)—— 圖生圖基礎

圖生圖基礎 本系列筆記主要參考B站nenly同學的視頻教程,傳送門:B站第一套系統的AI繪畫課!零基礎學會Stable Diffusion,這絕對是你看過的最容易上手的AI繪畫教程 | SD WebUI 保姆級攻略_嗶哩嗶哩_bilibili 本文主要講解如何使用S…

客戶端與服務端之間的通信連接

目錄 那什么是Socket? 什么是ServerSocket? 代碼展示: 代碼解析: 補充: 輸入流(InputStream): 輸出流(OutputStream): BufferedReader 是如何提高讀取效率的&a…

K8s集群初始化遇到的問題

kubectl describe pod coredns-545d6fc579-s9g5s -n kube-system 找到原因1:CoreDNS Pod 處于 Pending 狀態的原因是集群中的節點都帶有 node.kubernetes.io/not-ready 污點 journalctl -u kubelet -f 14:57:59.178592 3553 remote_image.go:114] "PullIma…

《簡歷寶典》12 - 簡歷中“項目經歷”,內功學習 - 下篇

這一小節呢,我們繼續說簡歷中 “項目經歷” 的一些內功心法。因為項目經歷比較核心,所以說完了,內功呢,我們會著重說一下 實戰部分。 目錄 1 所用技術的考慮 2 自我成長的突出 3 綜合使用STAR法則 4 小節 1 所用技術的考慮 …

如何評估AI模型:評估指標的分類、方法及案例解析

如何評估AI模型:評估指標的分類、方法及案例解析 引言第一部分:評估指標的分類第二部分:評估指標的數學基礎第三部分:評估指標的選擇與應用第四部分:評估指標的局限性第五部分:案例研究第六部分&#xff1a…

pear-admin-fast項目修改為集成PostgreSQL啟動

全局搜索代碼中的sysdate(),修改為now() 【前者是mysql特有的,后者是postgre特有的】修改application-dev.yml中的數據庫url使用DBeaver把mysql中的數據庫表導出csv,再從postgre中導入csv腳本轉換后出現了bpchar(xx)類型,那么一定…

用友U8存貨分類按層級取數SQL語句

SELECT cInvCCode 分類編碼, cInvCName 分類名稱, iInvCGrade 分類層級, ss.bInvCEnd 是否是末級, aa.* FROM InventoryClass ss LEFT JOIN ( SELECT * FROM ( SELECT cInvCCode AS 一級分類編碼, …

python數據可視化(6)——繪制散點圖

課程學習來源:b站up:【螞蟻學python】 【課程鏈接:【【數據可視化】Python數據圖表可視化入門到實戰】】 【課程資料鏈接:【鏈接】】 Python繪制散點圖查看BMI與保險費的關系 散點圖: 用兩組數據構成多個坐標點,考察…