我在树上工作,每个节点都可以有孩子。每个节点都有子节点自己生成的node_id来引用其父节点。一个简单的表示例如下:
CREATE TABLE IF NOT EXISTS `arbres` ( `node_id` int(11) NOT NULL AUTO_INCREMENT, `pare_id` int(11) DEFAULT NULL, PRIMARY KEY (`node_id`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=470 ; ALTER TABLE arbres ADD CONSTRAINT FK_E6A4F221A4467B16 FOREIGN KEY (pare_id) REFERENCES arbres(node_id) ON DELETE CASCADE;
我正在尝试的是找到一个能够选择每个孩子的查询,依此类推,我指的是孩子的孩子,孩子孩子的孩子等等。我是sql的新手,所以我可以用多个sql语句完成它,这不是一个好主意。感谢你的时间。
答案 0 :(得分:0)
您最好的选择是以节点为基础遍历树。由于没有保证你的树有多少级别,试图找到一个查询可能不是很好的做法。使用一个查询或过程可以多次返回给定父项的子项,如:
,这没有任何问题select node_id from arbres where pare_id = 1
假设你的root是pare_id = 1 然后对返回的每个节点执行相同的操作。如果没有返回节点,那么您知道最后一个节点是叶子。
如果您真的需要在一个查询中完成所有这些,只需执行
select * from arbres
重构你正在使用的编程语言的树。