最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql父子集查詢(根據(jù)父級查詢所有子集)

 更新時間:2024年02月06日 14:59:48   作者:咕嚕咕?;? 
某些場景可能需要維護一些有父子關(guān)系的數(shù)據(jù),本文主要介紹了mysql父子集查詢(根據(jù)父級查詢所有子集),具有一定的參考價值,感興趣的可以了解一下

在表中一定要有id和pid,這樣才能使用該sql。

需求1:

根據(jù)pid查詢出其下的所有子集(比如,子集的子集的子集…)全部查詢出來。

  • 首先,在表中按照父節(jié)點(parent_id)和id字段(id)的順序?qū)?shù)據(jù)進行排序,并將排序后的結(jié)果存入 org_query 子查詢中。
  • 然后,使用變量 @id 以遞歸方式檢索所有與指定節(jié)點相關(guān)的所有子節(jié)點。該變量初始化為 pid,并在 WHERE 子句和 SET 子句中用于確定與指定節(jié)點相關(guān)的行,直到找到樹的底部節(jié)點為止。關(guān)鍵的查詢部分是 CONCAT(@id, ‘,’, id) 函數(shù),它將每個查找到的子節(jié)點的id添加到 @id 變量中。其它一些細(xì)節(jié)如FIND_IN_SET 也保證了真正意義上的遞歸。
  • 最后,使用 GROUP_CONCAT 函數(shù)將子節(jié)點ID綜合成一個用逗號分隔的字符串(all_sub_ids),并輸出結(jié)果表。
SELECT GROUP_CONCAT(id) AS all_sub_ids 
FROM (
  SELECT * FROM (
    SELECT id,parent_id 
    FROM 表
    ORDER BY parent_id, id
  ) org_query,
  (SELECT @id := 此處填寫需要查詢的PID) initialisation
  WHERE FIND_IN_SET(parent_id, @id) > 0
  AND @id := CONCAT(@id, ',', id)
) sub_query;

這樣就把pid下所有的子集全部查詢出來,但是只在一列輸出,用,分割開來:

在這里插入圖片描述

需求2:

根據(jù)pid查詢出其下的所有子集(比如,子集的子集的子集…)全部查詢出來,但是需要作為集合列表展示,一個id作為一條數(shù)據(jù):
這個sql使用時,需要區(qū)別mysql版本是5還是8!

  • 首先,根據(jù)指定的節(jié)點ID,找到它在樹形結(jié)構(gòu)中的所有子節(jié)點。
  • 然后,將所有子節(jié)點的 ID 按照層級關(guān)系連接成一個字符串。例如, ‘1,2,3,6,7,8’ 表示節(jié)點6, 7和 8 是節(jié)點3的子節(jié)點,節(jié)點1,2和3是根節(jié)點(第一層節(jié)點)。
  • 接下來,使用 GROUP_CONCAT 函數(shù)和字符串替換操作確定每個子節(jié)點所在的層數(shù),并為每個節(jié)點分配一個行號,分配行號時需要使用 MySQL 的變量 (@rownum := @rownum + 1) 來生成唯一的行數(shù)。
  • 最后,使用 SUBSTRING_INDEX 函數(shù)和整數(shù)參數(shù) rn,確定每個子節(jié)點的位置,截取出每個子節(jié)點的ID,并將它們添加到 id_list 中。
  • 最終輸出的結(jié)果是一個帶有列名為"id_list"的表,該表包含由指定節(jié)點的所有子節(jié)點的 ID 組成的逗號分隔的列表。
5.7版本如下:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(all_sub_ids, ',', rn), ',', -1) AS id_list
FROM (
  SELECT GROUP_CONCAT(id) AS all_sub_ids, 
         ANY_VALUE(LENGTH(GROUP_CONCAT(id SEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(id SEPARATOR ','), ',', '')) + 1) AS c,
         @rownum := @rownum + 1 AS rn
  FROM (
    SELECT * FROM (
      SELECT id,parent_id 
      FROM 表
      ORDER BY parent_id, id
    ) org_query,
    (SELECT @id := 此處填寫需要查詢的PID) initialisation
    WHERE FIND_IN_SET(parent_id, @id) > 0
    AND @id := CONCAT(@id, ',', id)
  ) sub_query,
  (SELECT @rownum := 0) r
  GROUP BY rn 
) ids;
8.0版本如下:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(all_sub_ids, ',', rn), ',', -1) AS id_list, c
FROM (
  SELECT GROUP_CONCAT(id) AS all_sub_ids, 
         LENGTH(GROUP_CONCAT(id SEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(id SEPARATOR ','), ',', '')) + 1 AS c,
         @rownum := @rownum + 1 AS rn
  FROM (
    SELECT * FROM (
      SELECT id, parent_id 
      FROM 表
      ORDER BY parent_id, id
    ) org_query,
    (SELECT @id := 此處填寫需要查詢的PID) initialization
    WHERE FIND_IN_SET(parent_id, @id) > 0
    AND @id := CONCAT(@id, ',', id)
  ) sub_query,
  (SELECT @rownum := 0) r
  GROUP BY rn, c
) ids;

簡化版:
上面的sql其實就是脫褲子放屁,哈哈哈哈

SELECT id
  FROM (
    SELECT id,parent_id 
    FROM process_bim_data 
    ORDER BY parent_id, id
  ) org_query,
  (SELECT @id := 452) initialisation
  WHERE FIND_IN_SET(parent_id, @id) > 0
  AND @id := CONCAT(@id, ',', id)

結(jié)果如下:

在這里插入圖片描述

到此這篇關(guān)于mysql父子集查詢(根據(jù)父級查詢所有子集)的文章就介紹到這了,更多相關(guān)mysql父子集查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Mysql如何在select查詢時追加(添加)一個字段并指定值

    Mysql如何在select查詢時追加(添加)一個字段并指定值

    這篇文章主要介紹了Mysql如何在select查詢時追加(添加)一個字段并指定值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MySQL詳解進行JDBC編程與增刪改查方法

    MySQL詳解進行JDBC編程與增刪改查方法

    JDBC是指Java數(shù)據(jù)庫連接,是一種標(biāo)準(zhǔn)Java應(yīng)用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫
    2022-06-06
  • 在MySQL中刪除表的操作教程

    在MySQL中刪除表的操作教程

    這篇文章主要介紹了在MySQL中刪除表的操作教程,是MySQ入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • JSP連接MySQL數(shù)據(jù)庫詳細(xì)步驟

    JSP連接MySQL數(shù)據(jù)庫詳細(xì)步驟

    這篇文章主要介紹了JSP連接MySQL數(shù)據(jù)庫詳細(xì)步驟,文章內(nèi)容詳細(xì)全面,且通過實例進行講解,容易理解,需要的朋友可以參考下
    2023-01-01
  • MySQL中INFORMATION_SCHEMA的具體使用

    MySQL中INFORMATION_SCHEMA的具體使用

    MySQL的INFORMATION_SCHEMA是一個內(nèi)置的數(shù)據(jù)庫,用于提供關(guān)于數(shù)據(jù)庫、表、列、索引等元數(shù)據(jù),它包含許多表,每個表都存儲有關(guān)數(shù)據(jù)庫系統(tǒng)的特定信息,下面就來具體介紹一下如何使用
    2025-08-08
  • mysql中邏輯函數(shù)的具體使用

    mysql中邏輯函數(shù)的具體使用

    MySQL中邏輯函數(shù)包括IF、CASE、COALESCE、NULLIF和IFNULL,用于根據(jù)條件對數(shù)據(jù)進行判斷和選擇,適用于復(fù)雜的數(shù)據(jù)處理需求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Mysql滿意度調(diào)查分組去除最高最低求平均分的實現(xiàn)思路

    Mysql滿意度調(diào)查分組去除最高最低求平均分的實現(xiàn)思路

    該文章介紹了如何使用SQL查詢實現(xiàn)按部門分組,去除每個部門的最高分和最低分,并計算剩余分?jǐn)?shù)的平均分,文章詳細(xì)描述了實現(xiàn)這一需求的步驟,包括使用窗口函數(shù)、子查詢和CTE等技術(shù),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 安裝Mysql時可能會遇到的一些疑難雜癥

    安裝Mysql時可能會遇到的一些疑難雜癥

    這篇文章主要給大家介紹了關(guān)于安裝Mysql時可能會遇到的一些疑難雜癥,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MySQL并行DDL的實現(xiàn)方法

    MySQL并行DDL的實現(xiàn)方法

    本文詳細(xì)介紹了MySQL8.0.27并行DDL的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • MySQL數(shù)據(jù)庫表的增刪改查操作(進階)

    MySQL數(shù)據(jù)庫表的增刪改查操作(進階)

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫表的增刪改查操作,文章記錄常用的SQL查詢語句,包括數(shù)據(jù)庫、表和數(shù)據(jù)的增刪改查,逐漸擴展到其他比較復(fù)雜的查詢語句,需要的朋友可以參考下
    2023-11-11

最新評論

皋兰县| 郸城县| 舒城县| 黄骅市| 阳高县| 彭山县| 大名县| 安仁县| 托克逊县| 乐亭县| 安康市| 安乡县| 曲周县| 九江市| 通城县| 浪卡子县| 惠州市| 新和县| 剑川县| 九台市| 如东县| 淮阳县| 云霄县| 丰宁| 石城县| 鸡西市| 连山| 河西区| 东乌| 定边县| 山东省| 吉首市| 扶沟县| 方正县| 小金县| 漳平市| 精河县| 肇东市| 花垣县| 永仁县| 沙河市|