mysql7.5 递归查询语句怎么写
时间: 2023-12-31 16:53:25 浏览: 73
MySQL不支持递归查询语句,但是可以使用存储过程或者触发器实现递归查询。
以下是一个使用存储过程实现递归查询的示例:
创建表:
```
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
插入数据:
```
INSERT INTO `category` (`name`, `parent_id`) VALUES ('电子产品', NULL);
INSERT INTO `category` (`name`, `parent_id`) VALUES ('手机', 1);
INSERT INTO `category` (`name`, `parent_id`) VALUES ('电脑', 1);
INSERT INTO `category` (`name`, `parent_id`) VALUES ('笔记本', 3);
INSERT INTO `category` (`name`, `parent_id`) VALUES ('台式机', 3);
INSERT INTO `category` (`name`, `parent_id`) VALUES ('平板电脑', 1);
```
创建存储过程:
```
CREATE PROCEDURE `get_children`(IN `p_parent_id` INT)
BEGIN
SELECT * FROM `category` WHERE `parent_id` = p_parent_id;
SELECT @count := COUNT(*) FROM `category` WHERE `parent_id` = p_parent_id;
IF @count > 0 THEN
SET @i := 1;
WHILE @i <= @count DO
SELECT @id := `id` FROM `category` WHERE `parent_id` = p_parent_id ORDER BY `id` LIMIT @i - 1, 1;
CALL get_children(@id);
SET @i := @i + 1;
END WHILE;
END IF;
END;
```
调用存储过程:
```
CALL get_children(NULL);
```
以上存储过程会查询出所有的子孙节点,可以根据需要进行修改。
阅读全文