1. 程式人生 > >mysql單表遞迴查詢

mysql單表遞迴查詢

一、向下遞迴:

DROP FUNCTION IF EXISTS getAllChildren;
CREATE FUNCTION queryChildrenAreaInfo(parentId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0; END WHILE; RETURN sTemp; END;

在jpa中使用:

@Query(value = "select c.* from category c where FIND_IN_SET(id,queryChildrenAreaInfo(:parentId))",nativeQuery=true)
    List<Category> getAllChildren(@Param
("parentId") Integer parentId);

二、向上遞迴:

相關推薦

mysql查詢

一、向下遞迴: DROP FUNCTION IF EXISTS getAllChildren; CREATE FUNCTION queryChildrenAreaInfo(parentId INT) RETURNS VARCHAR(4000) BEGIN DE

mysql自關聯查詢

好久沒寫sql了,這個系統居然要求是全棧型別。從後到前都要做(我的js都忘光了),先記錄下一個sql這塊吧。 一需求: 現在有個表crm,裡面存放著:id,recommended_id,其中recommended_id屬於id範圍,就是推薦人的id。 現在的需求是,查詢全部

MySQL (employees)基礎查詢練習 (一)

測試用資料來源於Oracle資料庫中的測試資料#--基本SQL語句練習 #--1.查詢員工表所有資料 select * from employees #--2.列印公司裡所有的manager_id select manager_id from employees wher

OA專案中關於資料查詢

例如知道某員工頂級部門id(企業id)需要查詢所有員工正常Oracle遞迴SELECT DISTINCT U.*,UD.ORDER_NUM FROM TBL_BASE_USER U ,TBL_BASE_USER_DEPT UD,(select*from tbl_base_de

Hibernate註解實現樹形結構

目錄: 概述環境程式碼示例測試結果[一]、概述 在系統中,經常會用到無限級遞迴的樹形結構,比如選單、組織機構管理、多級分類等等,一般是在同一個表中定義父子關係實現這種樹形結構,本文主要講述如何運用hibernate全註解的方式實現這個功能。 [二]、環境 hibernate

mysql如何做查詢!!

mysql的逆襲:如何做遞迴層次查詢 最近在做一個從oracle資料庫到mysql資料庫的移植,遇到一個這樣的問題      在Oracle 中我們知道有一個 Hierarchical Queries 通過CONNECT BY 我們可以方便的查了所有當前節點下的

mysql查詢

運算 left count family 查詢 多表連接查詢 聲明 結果 優先 單表查詢語法: select 字段1,字段2... from 表名where 條 件group by fieldhaving 篩選order by 字段limit 限制條數 關鍵字的優先級:f

mysql--查詢---語句與語法

cte 。。 for 居中 默認 quit 性別 lec hang 一、單表查詢的語法 select 字段1,字段2,字段3.。。from 表名                   where 條件                  group by field 分領域(組

mysql 查詢

concat_ws 之前 max 其它 white lin sql_mod class arch 一 、單表查詢的語法 SELECT 字段1,字段2... FROM 表名 WHERE 條件 GROUP

MySQL查詢

多個 表名 spa lin 字符 style 一個 In 開頭 單表查詢 1、查詢所有: select * from 表名; 2、查詢選中字段數據: select 字段名 from 表名; 3、查詢指定條件下的數據: select 字段名 from 表名 where 條件(

MySQL查詢詳解

一、between……and……操作符 1、查詢薪水為1600到3000的員工(第一種方式:採用>= 、<=)  例如:select empno,ename,sal from emp where sal >= 1600 and sal <= 3000; 

MySQL自定義函式查詢

用於遞迴查詢Id(通過parentId關聯)引數為int 型別的值: CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS text CHARSET utf8 BEGIN DECLARE sTemp

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

由於mysql 不支援類似 oracle with ...connect的 遞迴查詢語法之前一直以為類似的查詢要麼用儲存過程要麼只能用程式寫遞迴查詢.現在發現原來一條sql語句也是可以搞定的先來看資料表的結構如下:id  name    parent_id&n

mysql、多查詢語句

#navicat與mysql8.0連線問題解決 1251–Client does not support authentication protocol requested by server 的解決辦法: 下面這四步解決,可以忽略第二步也可以 USE mysql; ALTER USE

mysql儲存過程代替查詢mysql儲存過程代替查詢

用mysql儲存過程代替遞迴查詢 查詢此表某個id=4028ab535e370cd7015e37835f52014b(公司1)下的所有資料 正常情況下,我們採用遞迴演算法查詢,如下 1

MySQL查詢詳細解析

一、關鍵字的執行優先順序   1,from:找到表   2,where:拿著where指定的約束條件,去檔案/表中取出一條條資料   3,group by:將取出的一條條資料進行分組,如果沒有group by,則整體作為一組   4,having:將分組的結果進行having過濾   5,selec

MySQL實現查詢樹形結構

這兩天,遇到了子節點的需求.這裡簡單做個總結. 1.資料庫中的樹形結構 資料庫中存貯的資料,以ID和P_ID(父id),來存貯樹形結構 這樣如果需要查詢某個節點的子節點,就可以尋找P_ID.如果要查詢所有子節點,就需要遍歷所有的子節點的子節點. 如果要判斷是否為同級的節點,就可以查詢

mysql 根據父id 查詢所有的子類

1、mysql中建立遞迴查詢方法 -- DROP FUNCTION `getChildrenOrg`  CREATE FUNCTION `getChildrenOrg`(uuid INT) RETURNS text CHARSET utf8 BEGIN     DECLAR

MySQL 查詢之高階查詢

一、聚合函式 聚合函式 函式名稱 作用 count() 返回某列的行數 sum() 返回某列值的和 avg() 返回某列的平均值 max() 返回某列的最大值 min() 返回某列的最小值 上面聚合函式的使用語法

MySQL已使用索引但查詢大資料結果時慢的解決辦法

目前做的專案使用MySQL資料庫,其中有張表包含近1000萬條記錄,表結構如下: Field Type Comment id int(11) NOT NULL 主鍵(PK) year int(4) NULL