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