【问题标题】:Better approach to recursive query in mysqlmysql中递归查询的更好方法
【发布时间】:2015-03-08 03:38:28
【问题描述】:

我有一张桌子。假设它有 2 列。 第 1 列是 Id,第 2 列是从属 ID 如果我想知道,所有依赖于 ID 的 ID。这种依赖可以是传递的。

即,如果 Id1 依赖于 Id2,而 Id3 依赖于 Id1。 那么如果我希望所有依赖于 ID2 的 tesult 都应该是 Id2 和 Id1。

为此,我必须向 mysql 发起多个查询,直到获得 nullSet。

Select Id where dependentID='ID2';

这将给出一组。然后,我将不得不对上述查询输出的 ID 集递归地触发上述查询。 我可以以某种方式仅在一个查询中执行此操作,即只有一个 I/O,还是有比上述方法更好的方法?

我使用的数据库是MYSQL。

【问题讨论】:

标签: mysql sql database


【解决方案1】:

如果你以锥形顺序存储对,生活会更简单,例如

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)。

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 2023-03-12
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 2019-03-09
    • 2014-09-11
    相关资源
    最近更新 更多