更好的方法在mysql中进行递归查询

时间:2015-03-05 18:54:35

标签: mysql sql database

我有一张桌子。假设它有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。

1 个答案:

答案 0 :(得分:0)

如果以锥形顺序存储对,例如

,生活会更简单
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)。