我有一张 table 。假设它有 2 列。 第 1 列是 Id ,第 2 列是从属 ID 如果我想知道所有依赖于 ID 的 Id。这种依赖关系可以是传递的。
即,如果 Id1 依赖于 Id2,并且 Id3 依赖于 Id1。 那么如果我想要所有依赖于 ID2 的测试结果应该是 Id2 和 Id1。
为此,我必须向 mysql 发起多个查询,直到获得 nullSet。
即
Select Id where dependentID='ID2';
这将给出一套。然后,我必须在上述查询输出的 ID 集上递归地触发上述查询。 我可以以某种方式仅用一个查询(即仅一个 I/O)来完成此操作吗?或者是否有比上述方法更好的方法?
我使用的数据库是MYSQL。
最佳答案
如果您以圆锥形顺序存储这些对,生活会更简单,例如
INSERT INTO tbl (id1, id2) VALUES
(LEAST($a, $b), GREATEST($a, $b));
回到您的“递归”查询。不,在 MySQL 的 SQL 中没有办法做到这一点。您必须用您最喜欢的编程语言编写循环。好吧,你可以写一个 MySQL 存储过程,但感觉真的很难。
用您的语言,我建议使用一个添加到数组的循环。保持数组有序。每次循环时,使用 IN 子句对数组元素再执行一次 SELECT。当您发现数组中没有新项目时终止循环。
SELECT 会是这样的
( SELECT id2 FROM tbl WHERE id1 IN (...) )
UNION
( SELECT id1 FROM tbl WHERE id2 IN (...) )
最好有复合索引 (id1,id2) 和 (id2, id1)。
关于mysql - mysql中递归查询的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28885507/