欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql循環一級級查詢

謝彥文2年前10瀏覽0評論

MySQL是目前最流行的關系型數據庫管理系統之一, 它的循環查詢功能非常強大, 可以讓開發者自由靈活地進行數據庫查詢操作, 接下來就讓我們一起學習如何循環一級級查詢。

/* 創建部門表 */
CREATE TABLE department(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
parent_id INT DEFAULT NULL
);
/* 插入數據 */
INSERT INTO department(name, parent_id) VALUES('CEO', NULL);
INSERT INTO department(name, parent_id) VALUES('技術部', 1);
INSERT INTO department(name, parent_id) VALUES('市場部', 1);
INSERT INTO department(name, parent_id) VALUES('研發部', 2);
INSERT INTO department(name, parent_id) VALUES('測試部', 2);
INSERT INTO department(name, parent_id) VALUES('銷售部', 3);
INSERT INTO department(name, parent_id) VALUES('宣傳部', 3);
INSERT INTO department(name, parent_id) VALUES('推廣部', 4);
INSERT INTO department(name, parent_id) VALUES('前端組', 4);
INSERT INTO department(name, parent_id) VALUES('后端組', 4);
INSERT INTO department(name, parent_id) VALUES('移動組', 4);

如上所示,我們創建了部門表,并插入了一些數據。這里parent_id表示上級部門id,NULL表示最高級部門或沒有上級部門。

/* 定義循環體 */
DELIMITER $$
CREATE PROCEDURE get_sub_department(IN p_department_id INT)
BEGIN
SELECT id, name, parent_id FROM department WHERE parent_id = p_department_id;
/* 定義變量 */
DECLARE done INT DEFAULT FALSE;
DECLARE next_department_id INT;
/* 定義游標 */
DECLARE cur CURSOR FOR SELECT id FROM department WHERE parent_id = p_department_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
/* 開始循環 */
OPEN cur;
read_loop: LOOP
/* 讀取游標 */
FETCH cur INTO next_department_id;
/* 判斷游標是否結束 */
IF done THEN
LEAVE read_loop;
END IF;
/* 遞歸執行 */
CALL get_sub_department(next_department_id);
END LOOP;
/* 關閉游標 */
CLOSE cur;
END$$
DELIMITER ;

此處我們定義了一個存儲過程get_sub_department,它接收一個p_department_id參數,返回該部門的所有下級部門。將游標讀取到的next_department_id作為參數遞歸調用get_sub_department存儲過程實現循環查詢。

/* 調用存儲過程 */
CALL get_sub_department(NULL);

通過以上代碼,我們可以調用get_sub_department存儲過程,并將NULL作為參數來獲取所有部門的層級關系。可以看到,MySQL提供了很強大的功能來完成層級查詢,開發者可以根據實際需要進行調整和擴展。