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

mysql通過@變量實(shí)現(xiàn)遞歸詳細(xì)實(shí)例

 更新時(shí)間:2023年06月07日 10:34:57   作者:supuerlovepc  
眾所周知目前的mysql版本中并不支持直接的遞歸查詢,下面這篇文章主要給大家介紹了關(guān)于mysql通過@變量實(shí)現(xiàn)遞歸的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. 測(cè)試表結(jié)構(gòu)

create table demo
(
    id varchar(100) not null
        primary key,
    parentId    varchar(100) not null
);
-- 測(cè)試數(shù)據(jù)
INSERT INTO demo (ID, parentID) VALUES ('1', '0');
INSERT INTO demo (ID, parentID) VALUES ('10', '9');
INSERT INTO demo (ID, parentID) VALUES ('11', '9');
INSERT INTO demo (ID, parentID) VALUES ('2', '1');
INSERT INTO demo (ID, parentID) VALUES ('3', '2');
INSERT INTO demo (ID, parentID) VALUES ('4', '3');
INSERT INTO demo (ID, parentID) VALUES ('5', '4');
INSERT INTO demo (ID, parentID) VALUES ('6', '5');
INSERT INTO demo (ID, parentID) VALUES ('7', '6');
INSERT INTO demo (ID, parentID) VALUES ('8', '1');
INSERT INTO demo (ID, parentID) VALUES ('9', '1');

2. 向下遞歸(包括自己)

-- 向下遞歸 par即為遞歸查詢出來的所有id
SELECT
    @par                                                                          AS par,
    (SELECT @par := GROUP_CONCAT(id) FROM demo WHERE FIND_IN_SET(parentid, @par)) AS son
FROM demo_userm, (SELECT @par := '1') T
WHERE @par IS NOT NULL;
查詢結(jié)果:
| par       | son     |
| 1         | 2,8,9   |
| 2,8,9     | 10,11,3 |
| 10 ,11,3  | 4       |
| 4         | 5       |
| 5         | 6       |
| 6         | 7       |
| 7         | NULL    |

3.向下遞歸(不包括自己)

-- 向下遞歸 par即為遞歸查詢出來的所有id
SELECT
    @par                                                                          AS par,
    (SELECT @par := GROUP_CONCAT(id) FROM demo WHERE FIND_IN_SET(parentid, @par)) AS son
FROM demo_userm, (SELECT @par := '1') T
WHERE @par IS NOT NULL and @par != '1';
查詢結(jié)果:
| par       | son     |
| 2,8,9     | 10,11,3 |
| 10 ,11,3  | 4       |
| 4         | 5       |
| 5         | 6       |
| 6         | 7       |
| 7         | NULL    |

4. 向下遞歸可能存在問題,修正優(yōu)化:

-- 如果存在 par = 51016 并且 son = 51016 , 那么會(huì)出現(xiàn)問題,多出許多數(shù)據(jù)
SELECT
    @par                                                                          AS par,
    (SELECT @par := GROUP_CONCAT(distinct ORG_REFNO) FROM gis_udp_bank WHERE FIND_IN_SET(PNBRN_ORG_REFNO, @par)) AS son
FROM gis_udp_bank, (SELECT @par := '51016') T
WHERE @par IS NOT NULL;
-- 優(yōu)化后:后面家條件: !FIND_IN_SET(ORG_REFNO, @par)
SELECT
    @par                                                                          AS par,
    (SELECT @par := GROUP_CONCAT(distinct ORG_REFNO) FROM gis_udp_bank WHERE FIND_IN_SET(PNBRN_ORG_REFNO, @par)
        and !FIND_IN_SET(ORG_REFNO, @par)
        ) AS son
FROM gis_udp_bank, (SELECT @par := '51016') T
WHERE @par IS NOT NULL;

5. 向上遞歸

SELECT
    @par                                                                     AS par,
    (SELECT @par := GROUP_CONCAT(NAME) FROM demo_userm WHERE LOGONID = @par) AS son
FROM demo_userm, (SELECT @par := '10') T
WHERE @par IS NOT NULL;
par即為遞歸查詢結(jié)果
查詢結(jié)果:
| par | son |
| 10  | 9   |
| 9   | 1   |
| 1   | 0   |
| 0   | NULL|

所用函數(shù)介紹:

1、GROUP_CONCAT([distinct] colName)

一般用于取ID集合。
select  * from demo_userm t where NAME = 1;
| LOGONID | NAME |
| 2       | 1    |
| 8       | 1    |
| 9       | 1    |
select  GROUP_CONCAT(LOGONID) from demo_userm t where NAME = 1;
| GROUP\_CONCAT\(LOGONID\) |
| 2,8,9 |
-- 不去重取name集合
select  GROUP_CONCAT(NAME) from demo_userm t where NAME in (1,2,3,4,5,6,7);
| GROUP\_CONCAT\(NAME\) |
| 1,2,3,4,5,6,1,1 |
-- 去重再取name集合
select  GROUP_CONCAT(distinct NAME) from demo_userm t where NAME in (1,2,3,4,5,6,7);
| GROUP\_CONCAT\(distinct NAME\) |
| 1,2,3,4,5,6 |

2、FIND_IN_SET(colName, strs)

select * from demo_userm where  FIND_IN_SET(LOGONID, ('1,2,3,4'));
| LOGONID | NAME |
| 1       | 0    |
| 2       | 1    |
| 3       | 2    |
| 4       | 3    |
select * from demo_userm where  
FIND_IN_SET(LOGONID, (select  GROUP_CONCAT(LOGONID) from demo_userm t where NAME = 1));
| LOGONID | NAME |
| 2       | 1    |
| 8       | 1    |
| 9       | 1    |

3、#@是用戶變量,@@是系統(tǒng)變量。

用戶變量賦值有兩種方式: 一種是直接用"=“號(hào),另一種是用”:=“號(hào)。

其區(qū)別在于:

使用set命令對(duì)用戶變量進(jìn)行賦值時(shí),兩種方式都可以使用; # 用select語句時(shí),只能用”:=“方式,因?yàn)閟elect語句中,”="號(hào)被看作是比較操作符。

總結(jié)

到此這篇關(guān)于mysql通過@變量實(shí)現(xiàn)遞歸的文章就介紹到這了,更多相關(guān)mysql @變量實(shí)現(xiàn)遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談MySQL和Lucene索引的對(duì)比分析

    淺談MySQL和Lucene索引的對(duì)比分析

    下面小編就為大家?guī)硪黄狹ySQL和Lucene索引的對(duì)比分析。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • Window10下安裝 mysql5.7圖文教程(解壓版)

    Window10下安裝 mysql5.7圖文教程(解壓版)

    這篇文章主要介紹了Window10下安裝 mysql5.7圖文教程(解壓版),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2016-08-08
  • 全面了解mysql中utf8和utf8mb4的區(qū)別

    全面了解mysql中utf8和utf8mb4的區(qū)別

    下面小編就為大家?guī)硪黄媪私鈓ysql中utf8和utf8mb4的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • MySQL 查詢結(jié)果取交集的實(shí)現(xiàn)方法

    MySQL 查詢結(jié)果取交集的實(shí)現(xiàn)方法

    本文將詳細(xì)介紹MySQL中如何實(shí)現(xiàn)以SQL查詢返回的結(jié)果集取交集的實(shí)現(xiàn)方法,需要的朋友可以參考
    2012-11-11
  • MySQL 聯(lián)合索引實(shí)戰(zhàn)示例

    MySQL 聯(lián)合索引實(shí)戰(zhàn)示例

    文章講解了MySQL聯(lián)合索引的原理、使用場(chǎng)景和優(yōu)化策略,通過實(shí)際項(xiàng)目案例分析了如何根據(jù)業(yè)務(wù)需求合理設(shè)計(jì)索引,優(yōu)化查詢性能,最后解釋了覆蓋索引的概念及其在查詢中的優(yōu)勢(shì),強(qiáng)調(diào)了索引設(shè)計(jì)的重要性,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • 詳解 MySQL中count函數(shù)的正確使用方法

    詳解 MySQL中count函數(shù)的正確使用方法

    這篇文章主要介紹了 MySQL中count函數(shù)的正確使用方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下。
    2020-11-11
  • MySQL自增列解析(Auto_increment)

    MySQL自增列解析(Auto_increment)

    MySQL數(shù)據(jù)庫為列提供了一種自增屬性,本文主要介紹了MySQL自增列解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 關(guān)于Mysql5.7及8.0版本索引失效情況匯總

    關(guān)于Mysql5.7及8.0版本索引失效情況匯總

    這篇文章主要介紹了關(guān)于Mysql5.7及8.0版本索引失效情況匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 一篇文章帶你輕松了解MySQL之事務(wù)的簡(jiǎn)介

    一篇文章帶你輕松了解MySQL之事務(wù)的簡(jiǎn)介

    事務(wù)可以由一條非常簡(jiǎn)單的SQL語句組成,也可以由一組復(fù)雜的SQL語句組成,事務(wù)的目的是將數(shù)據(jù)庫從一種一致性狀態(tài)轉(zhuǎn)換為另一種一致性狀態(tài),下面這篇文章主要給大家介紹了關(guān)于MySQL事務(wù)簡(jiǎn)介的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • SQL執(zhí)行步驟的具體分析

    SQL執(zhí)行步驟的具體分析

    這篇文章主要介紹了SQL執(zhí)行步驟的具體分析的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握SQL是如何執(zhí)行的,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

合山市| 遂溪县| 胶南市| 孟津县| 惠水县| 四会市| 常德市| 温州市| 宝坻区| 肇庆市| 吴堡县| 阿坝| 林西县| 黎平县| 且末县| 彭山县| 华亭县| 南木林县| 泸西县| 磴口县| 汽车| 呼玛县| 许昌县| 淮南市| 灌南县| 大新县| 鹰潭市| 新绛县| 木兰县| 盐津县| 县级市| 新河县| 曲松县| 内丘县| 龙山县| 长海县| 新闻| 浮梁县| 安平县| 襄垣县| 闽清县|