當前位置:首頁 » 編程語言 » mysqlsql語句遞歸

mysqlsql語句遞歸

發布時間: 2022-10-17 16:30:53

❶ mysql 中如何實現遞歸,不要採用自己寫的函數,也不要用存儲過程,就單純的sql 可以搞定么

with a as
(select * from table1 where parentid=0
union all
select b.* from a,table1 b where a.id=b.parentid)

select * from a

用with as 來實現遞歸

❷ MySQL怎樣做遞歸查詢

mysql的逆襲:如何做遞歸層次查詢

最近在做一個從oracle資料庫到mysql資料庫的移植,遇到一個這樣的問題

在Oracle 中我們知道有一個 Hierarchical Queries 通過CONNECT BY 我們可以方便的查了所有當前節點下的所有子節點。但shi,在MySQL的目前版本中還沒有對應的函數!!!

換句話來說,想要用mysql實現遞歸查詢,根本做不到!!!
可是經過我數天茶不思飯不想的刻苦琢磨,終於想到了一個合理的,適用於mysql和其他sql的解決方案。
方案一出,就秋風掃落葉之勢,席捲整個層~~~所到之處,所有問題迎刃而解,讓所有問題都不再為問題 都成為了我這個函數的炮灰而已。。。

❸ sql語句實現遞歸查詢所有節點,mysql和oracle都能用的

首先說一下Oracle的遞歸查詢,相信大部分人都知道很簡單。無非start with connect by 函數。下面是從pId向子節點遞歸查詢的例子,unId是資料庫表中的主鍵。

如果是從子節點遞歸到父節點查詢,就把start with 換成unid,prior左右對換

下面再講MySql 的遞歸查詢方式。MySql沒有Oracle的強大功能,雖然都是同一個公司的產品。所以只能靠自己寫。有很多方法,用sql去循環查詢,或者寫存儲過程,我這里只提供一種。就是新建一個function函數。

表結構不說了,無非就是 Id ,pId,其他列。下面是創建一個遞歸查詢子節點的函數

DROP FUNCTION IF EXISTS queryChildrenPowerInfo;

CREATE FUNCTION `queryChildrenPowerInfo` (powerId VARCHAR(2000))

RETURNS VARCHAR(2000)

BEGIN

DECLARE sTemp VARCHAR(2000);

DECLARE sTempChd VARCHAR(2000);

SET sTemp = '$';

SET sTempChd = cast(powerId as CHAR);

WHILE sTempChd is not NULL DO

SET sTemp = CONCAT(sTemp, ',', sTempChd);

SELECT group_concat(id) INTO sTempChd FROM t_discretionary_power where FIND_IN_SET(pId,sTempChd)>0;

END WHILE;

return sTemp;

調用的時候:select queryChildrenPowerInfo(""); 該語句會返回Id和父Id等於傳入參數powerId的一個字元串,中間有逗號隔開如圖

下面這句代碼的意思是,查詢出 t_discretionary_power 表中,t.id 等於上面查詢出的結果集的數據。FIND_IN_SET(A,B)是MYSQL的函數。意思是查找在B集合中有A的數據。相當於In

select t.* from t_discretionary_power t where FIND_IN_SET(t.id,queryChildrenPowerInfo(''))

❹ mysql有遞歸函數嗎

mysql是可以使用遞歸函數的,如下例子:
mysql樹查詢,sql遞歸函數

select cateID from goodscategory where FIND_IN_SET(cateID ,getGoodsChildLst('43242'))

CREATE FUNCTION `getGoodsChildLst`(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(cateID) INTO sTempChd FROM goodscategory where FIND_IN_SET(parentCateID,sTempChd)>0;
END WHILE;
RETURN sTemp;
END

❺ 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 ;

使用我們直接利用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)

❻ mysql遞歸查詢語句

mysql遞歸查詢,mysql中從子類ID查詢所有父類(做無限分類經常用到)

由於mysql 不支持類似 oracle with ...connect的 遞歸查詢語法
之前一直以為類似的查詢要麼用存儲過程要麼只能用程序寫遞歸查詢.

現在發現原來一條sql語句也是可以搞定的

先來看數據表的結構如下:

id name parent_id
---------------------------
1 Home 0
2 About 1
3 Contact 1
4 Legal 2
5 Privacy 4
6 Procts 1
7 Support 1
我要的要求是根據一個分類ID(這個分類ID可能是一個子分類),得到所有的父分類,下面是相應的SQL:

SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0) vars,
table1 h
WHERE @r <> 0) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC

代碼@r := 5標示查詢id為5的所有父類。結果如下
1, 『Home』
2, 『About』
4, 『Legal』
5, 『Privacy』

自己仿照這看一下!

❼ mysql如何遞歸匯總

單表自身關聯查詢,關聯條件就是父節點pcode和code相等,查詢欄位包含pcode和sorce,將查詢結果作為新表按pcode分組,用group by,查詢欄位是count記錄數,這樣就獲取pcode的節點值,這是整體思路

❽ 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
;
使用我們直接利用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)

❾ 那位高手幫我實現一下mysql遞歸查詢

遞歸.

❿ mysql 怎麼實現sql的with遞歸

概念說不一定理解,給你一個例子你自己參悟。 SELECT TEACHER FROM C AS X WHERE UNIQUE(SELECT TEACHER FROM C AS Y WHERE Y.TEACHER=X.TEACHER);

熱點內容
速喵游戲下載為什麼要鎖屏密碼 發布:2024-12-24 11:07:38 瀏覽:336
國家基礎資料庫 發布:2024-12-24 10:58:20 瀏覽:923
python是否是字元串 發布:2024-12-24 10:56:51 瀏覽:525
疫區的消毒應怎麼配置 發布:2024-12-24 10:55:31 瀏覽:241
可樂雲解壓密碼 發布:2024-12-24 10:50:18 瀏覽:759
數據存儲與容災 發布:2024-12-24 10:49:47 瀏覽:597
蘋果安卓哪個好玩 發布:2024-12-24 10:44:00 瀏覽:317
怎麼在電腦上建網站上傳ftp 發布:2024-12-24 10:34:36 瀏覽:777
linux下安裝驅動 發布:2024-12-24 10:33:03 瀏覽:652
什麼人用獨立伺服器 發布:2024-12-24 10:22:09 瀏覽:684