Mysql树形表的两种查询方案(递归与自连接)
在MySQL中,可以使用存储过程或者公用表表达式(CTE)来实现递归查询。但是MySQL不支持CTE,所以这里只能使用存储过程来实现。
以下是一个使用存储过程实现递归查询的例子:
DELIMITER //
CREATE PROCEDURE get_children(IN parent_id INT)
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS temp_results (
id INT,
parent_id INT
);
DELETE FROM temp_results WHERE parent_id = parent_id;
INSERT INTO temp_results(id, parent_id)
SELECT id, parent_id FROM your_table WHERE parent_id = parent_id
UNION ALL
SELECT t.id, t.parent_id FROM your_table t INNER JOIN temp_results tr ON t.parent_id = tr.id;
SELECT * FROM temp_results;
END //
DELIMITER ;
CALL get_children(1);
在这个例子中,your_table
是你的树形表,id
是节点的唯一标识,parent_id
是指向父节点的外键。存储过程首先创建一个临时表(如果不存在),然后删除临时表中与传入的parent\_id相同的记录,接着将与传入的parent\_id相同的记录插入临时表,并且递归地将所有子孙节点也插入临时表。最后返回临时表的内容。
请注意,这个例子只是一个简化的模板,你需要根据你的具体表结构和需求进行调整。
评论已关闭