gpt4 book ai didi

mysql内部连接 parent 的所有儿子

转载 作者:行者123 更新时间:2023-11-29 13:11:00 25 4
gpt4 key购买 nike

我有一个表结构为

Id int(10)
Parent int(10) --reference I'd
Name

该表包含组织结构。示例数据

Id | parent | name
1 Null organization A
2 1 Office A
3 1 Office B
4 3 Room 1
5 3 Room 2

`

这个例子简单地映射了 org. A有2个办公室,B办公室有2个房间。

父字段保留 null(如果没有父节点结束节点)或父节点的 ID。

我想获取父行的所有行

我希望我的查询返回所有 child 的 child 以及 child 的 child 。

我可以通过一个查询来完成此操作吗?

最佳答案

除非你有一个固定的层次结构深度,否则我无法想象你如何使用 MySQL 中的一个查询来完成它(可能总是错误的)。如果您的层次结构深度小于 255,您可以通过对先前创建的递归过程进行一次调用来完成此操作,如下所示。

内部过程内部

CREATE PROCEDURE `parent_child`(in `I_Parent` int)
BEGIN
DECLARE `V_done` INT;
DECLARE `V_Id` INT;
DECLARE `V_Parent` INT;
DECLARE `V_Name` VARCHAR(45);
DECLARE `cur1` CURSOR FOR SELECT * FROM `stackoverflow`.`parent_child` WHERE `Parent` = `I_Parent`;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET `V_done` = TRUE;

INSERT INTO `stackoverflow`.`parent_child_temp` SELECT `Id`, `Parent`, `Name` FROM `stackoverflow`.`parent_child` WHERE `Parent` IS NULL AND `Id` = `I_Parent`;

OPEN `cur1`;

read_loop: LOOP
FETCH `cur1` INTO `V_Id`, `V_Parent`, `V_Name` ;
IF `V_done` THEN
LEAVE read_loop;
END IF;
INSERT INTO `stackoverflow`.`parent_child_temp` SELECT `V_Id`, `V_Parent`, `V_Name`;
CALL `stackoverflow`.`parent_child`(V_Id);

END LOOP;

CLOSE `cur1`;
END

包装程序内部

CREATE PROCEDURE `parent_child_wrapper`(in `I_WrapperParent` int)
BEGIN
SET @@SESSION.max_sp_recursion_depth = 255;
DROP TABLE IF EXISTS `stackoverflow`.`parent_child_temp`;
CREATE TEMPORARY TABLE `stackoverflow`.`parent_child_temp` (id int, parent int, name varchar(45));
CALL `stackoverflow`.`parent_child`(`I_WrapperParent`);
SELECT * FROM `stackoverflow`.`parent_child_temp`;
END

调用SQL
调用 stackoverflow.parent_child_wrapper(1);

引用文献
* http://dev.mysql.com/doc/refman/5.0/en/cursors.html
* How I query (with mysql) column names that "unfortunately" have round brackets?
* http://www.sitepoint.com/cursors-mysql-stored-procedures/
* How to echo print statements while executing a sql script
* http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_sp_recursion_depth
* MySql :: stored procedure recursive
* http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm
* How to get depth in mysql store procedure recursion?

关于mysql内部连接 parent 的所有儿子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com