日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql递归层次查询

發布時間:2024/7/19 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql递归层次查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql遞歸層次查詢

最近在做一個從oracle數據庫到mysql數據庫的移植,遇到一個這樣的問題 ? ?? 在Oracle?中我們知道有一個 Hierarchical Queries 通過CONNECT BY 我們可以方便的查了所有當前節點下的所有子節點。但shi,在MySQL的目前版本中還沒有對應的函數!!!? 換句話來說,想要用mysql實現遞歸查詢,根本做不到!!!? 可是經過我數天茶不思飯不想的刻苦琢磨,終于想到了一個合理的,適用于mysql和其他sql的解決方案。 www.2cto.com ? 方案一出,就秋風掃落葉之勢,席卷整個dao層~~~所到之處,所有問題迎刃而解,讓所有問題都不再為問題 都成為了我這個函數的炮灰而已。。。? 話不多說待我把解決方法仔細道來~~~~~? 下面是sql腳本,想要運行一下 把下邊的粘貼復制下來,做一個treenodes.sq直接運行便是。。。? /*? Navicat MySQL Data Transfer? Source Server ? ? ? ? : mysql_demo3? Source Server Version : 50521? Source Host ? ? ? ? ? : localhost:3306? Source Database ? ? ? : test? Target Server Type ? ?: MYSQL? Target Server Version : 50521? File Encoding ? ? ? ? : 65001? www.2cto.com ? Date: 2012-09-02 21:16:03? */? SET FOREIGN_KEY_CHECKS=0;? -- ----------------------------? -- Table structure for `treenodes`? -- ----------------------------? DROP TABLE IF EXISTS `treenodes`;? CREATE TABLE `treenodes` (? `id` int(11) NOT NULL,? `nodename` varchar(20) DEFAULT NULL,? `pid` int(11) DEFAULT NULL,? PRIMARY KEY (`id`)? ) ENGINE=InnoDB DEFAULT CHARSET=latin1;? -- ----------------------------? -- Records of treenodes? -- ----------------------------? INSERT INTO `treenodes` VALUES ('1', 'A', '0');? INSERT INTO `treenodes` VALUES ('2', 'B', '1');? INSERT INTO `treenodes` VALUES ('3', 'C', '1');? INSERT INTO `treenodes` VALUES ('4', 'D', '2');? INSERT INTO `treenodes` VALUES ('5', 'E', '2');? INSERT INTO `treenodes` VALUES ('6', 'F', '3');? INSERT INTO `treenodes` VALUES ('7', 'G', '6');? INSERT INTO `treenodes` VALUES ('8', 'H', '0');? INSERT INTO `treenodes` VALUES ('9', 'I', '8');? INSERT INTO `treenodes` VALUES ('10', 'J', '8');? INSERT INTO `treenodes` VALUES ('11', 'K', '8');? INSERT INTO `treenodes` VALUES ('12', 'L', '9');? INSERT INTO `treenodes` VALUES ('13', 'M', '9');? INSERT INTO `treenodes` VALUES ('14', 'N', '12');? INSERT INTO `treenodes` VALUES ('15', 'O', '12');? INSERT INTO `treenodes` VALUES ('16', 'P', '15');? INSERT INTO `treenodes` VALUES ('17', 'Q', '15');? www.2cto.com ? ---------------------------------------------------? 上邊是sql腳本,在執行select * 之后顯示的結果集如下所示:? mysql> select * from treenodes;? +----+----------+------+? | id | nodename | pid ?|? +----+----------+------+? | ?1 | A ? ? ? ?| ? ?0 |? | ?2 | B ? ? ? ?| ? ?1 |? | ?3 | C ? ? ? ?| ? ?1 |? | ?4 | D ? ? ? ?| ? ?2 |? | ?5 | E ? ? ? ?| ? ?2 |? | ?6 | F ? ? ? ?| ? ?3 |? | ?7 | G ? ? ? ?| ? ?6 |? | ?8 | H ? ? ? ?| ? ?0 |? | ?9 | I ? ? ? ?| ? ?8 |? | 10 | J ? ? ? ?| ? ?8 |? | 11 | K ? ? ? ?| ? ?8 |? | 12 | L ? ? ? ?| ? ?9 |? | 13 | M ? ? ? ?| ? ?9 |? | 14 | N ? ? ? ?| ? 12 |? | 15 | O ? ? ? ?| ? 12 |? | 16 | P ? ? ? ?| ? 15 |? | 17 | Q ? ? ? ?| ? 15 |? +----+----------+------+? 17 rows in set (0.00 sec)? 樹形圖如下? 1:A? +-- 2:B? | ? ?+-- 4:D? | ? ?+-- 5:E? +-- 3:C? +-- 6:F? +-- 7:G? 8:H? +-- 9:I? | ? ?+-- 12:L? | ? ?| ? ?+--14:N? | ? ?| ? ?+--15:O? | ? ?| ? ? ? ?+--16:P? | ? ?| ? ? ? ?+--17:Q? | ? ?+-- 13:M? +-- 10:J? +-- 11:K ?? --------------------------------------------? 如果給你一個這樣的table,讓你查詢根節點為1下的所有節點記錄(注意也包括根節點),,腫麼辦?????? 可能有不少人想到connect by 函數,但是我灰常遺憾的告訴你,咱這兒是mysql!!!? 好,客觀您勒上眼,,我的解決辦法是? 利用函數來得到所有子節點號。? 閑話少續,看我的解決方法? 創建一個function getChildLst, 得到一個由所有子節點號組成的字符串. ? mysql> delimiter //? mysql>? mysql> CREATE FUNCTION `getChildLst`(rootId INT)? -> RETURNS varchar(1000)? -> BEGIN? -> ? DECLARE sTemp VARCHAR(1000);? -> ? DECLARE sTempChd VARCHAR(1000);? ->? -> ? SET sTemp = '$';? -> ? SET sTempChd =cast(rootId as CHAR);? ->? -> ? WHILE sTempChd is not null DO? -> ? ? SET sTemp = concat(sTemp,',',sTempChd);? -> ? ? SELECT group_concat(id) INTO sTempChd FROM treeNodes where FIND_IN_SET(pid,sTempChd)>0;? -> ? END WHILE;? -> ? RETURN sTemp;? -> END? -> //? Query OK, 0 rows affected (0.00 sec)? mysql>? mysql> delimiter ;? www.2cto.com ? 使用我們直接利用find_in_set函數配合這個getChildlst來查找? mysql> select getChildLst(1);? +-----------------+? | getChildLst(1) ?|? +-----------------+? | $,1,2,3,4,5,6,7 |? +-----------------+? 1 row in set (0.00 sec)? mysql> select * from treeNodes? -> where FIND_IN_SET(id, getChildLst(1));? +----+----------+------+? | id | nodename | pid ?|? +----+----------+------+? | ?1 | A ? ? ? ?| ? ?0 |? | ?2 | B ? ? ? ?| ? ?1 |? | ?3 | C ? ? ? ?| ? ?1 |? | ?4 | D ? ? ? ?| ? ?2 |? | ?5 | E ? ? ? ?| ? ?2 |? | ?6 | F ? ? ? ?| ? ?3 |? | ?7 | G ? ? ? ?| ? ?6 |? +----+----------+------+? 7 rows in set (0.01 sec)? mysql> select * from treeNodes? -> where FIND_IN_SET(id, getChildLst(3));? +----+----------+------+? | id | nodename | pid ?|? +----+----------+------+? | ?3 | C ? ? ? ?| ? ?1 |? | ?6 | F ? ? ? ?| ? ?3 |? | ?7 | G ? ? ? ?| ? ?6 |? +----+----------+------+? 3 rows in set (0.01 sec)? --------------------------------------------? 只要按我的做,百發百中彈無虛發,遇到問題萬變不離其宗直接粘貼復制就是。。。? 補充: 還可以做嵌套查詢:? select id,pid from treeNodes where id in(? select id from treeNodes where FIND_IN_SET(id, getChildLst(3))? );? 子查詢的結果集是? www.2cto.com ? +--------+? id? ----? 3? 6? 7? +-------+? 然后經過外層查詢就是? id ?pid? 3 ? 1? 6 ? 3? 6 ? 6? ---------? 轉自:http://www.2cto.com/database/201209/152513.html

轉載于:https://www.cnblogs.com/yuan951/p/6429441.html

總結

以上是生活随笔為你收集整理的mysql递归层次查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91美女啪啪 | 日韩欧美在线观看一区二区 | 日韩精品在线观看视频 | 欧美黄色激情视频 | 国际av在线 | 激情文学88| 久久久久国产综合av天堂 | 亚洲精品视频一区二区三区 | 国产精品日韩av | 国产高清无密码一区二区三区 | 日本黄网在线观看 | 日本视频黄色 | 国产精品久久久久9999爆乳 | 亚洲激情中文 | 国产亚洲自拍一区 | 黄页网址大全免费观看 | 日韩精品第一页 | 免费成人蒂法网站 | 天天爱av| 精品国产鲁一鲁一区二区张丽 | 国产精选一区二区三区 | 在线你懂的视频 | 欧美色图亚洲激情 | 天堂网中文 | videos亚洲| 日韩大片免费观看视频播放 | 亚洲色图第1页 | 五月婷婷综合激情 | 粉嫩小箩莉奶水四溅在线观看 | 欧美男人亚洲天堂 | 国产91久久婷婷一区二区 | 无码人妻精品一区二区三区66 | 青娱乐在线视频免费观看 | 午夜老司机福利 | 欧美日韩极品 | 日韩成人精品 | 黄色av一区二区 | 五月天亚洲综合 | 欧美蜜桃视频 | 57pao国产成永久免费视频 | 成人午夜精品一区二区三区 | 三上悠亚ssⅰn939无码播放 | 人妖天堂狠狠ts人妖天堂狠狠 | 亚洲欧美变态另类丝袜第一区 | 亚洲综合激情五月久久 | 日本少妇xxx | 中文字幕一区二区三区四区欧美 | 日本免费一区二区三区四区五六区 | 我色综合 | 欧美亚洲日本国产 | 中文字幕素人 | 精品偷拍一区 | 丁香婷婷一区二区三区 | 日韩三级一区 | 伊人久久国产精品 | 超碰九七 | 男女黄网站 | 97夜夜 | 亚洲视频在线免费播放 | 超碰凹凸 | 人妻丝袜一区 | 欧美黄色大片在线观看 | 萌白酱一区二区 | 狠狠操一区 | 国产福利精品在线观看 | 国产免费视频一区二区三区 | 一级a毛片免费观看久久精品 | 黑丝美女av| 亚洲成人黄色在线 | 亚a在线| 在线观看sm | 中文在线最新版天堂 | 国产综合激情 | 免费观看av的网站 | 激情久久中文字幕 | 一级免费毛片 | chien国产乱露脸对白 | 农村妇女毛片精品久久久 | 国产精品亚洲а∨天堂免在线 | 免费污视频在线观看 | 一个人免费在线观看视频 | 西方裸体在线观看 | 国产视频手机在线播放 | 久久精品视频18 | 国产伦精品一区二区三区网站 | 人人澡人人插 | 丰满少妇被猛烈进入高清播放 | 中文字幕a级片 | 高h喷汁呻吟3p | 97se亚洲国产综合在线 | 制服丝袜先锋 | 中文字幕欧美另类精品亚洲 | 中文字幕在线观看的网站 | 最新精品国产 | 97福利在线 | 狠狠躁日日躁夜夜躁 | 国产第七页 | sm久久捆绑调教精品一区 | 欧美xxxx×黑人性爽 |