我有一个非常简单的架构的表:走一棵树向后SQL
CREATE TABLE q(
orig INTEGER NOT NULL,
dest INTEGER NOT NULL,
cost FLOAT,
PRIMARY KEY (orig, dest)
);
我需要走该表向后成本最小化的方式。让我解释。
我需要参观15分,积分可以是orig
或dest
。我的算法是从最后dest
回溯到初始orig
。因此,这里是我怎么拼出来:
鉴于最终
dest
,发现这将链接orig
以最小cost
说dest
。相应orig
成为新dest
;循环15次。
让我们假设我知道上次dest
是数10
。 SQL语句,让我找到了orig
导致dest
在cost-
最小化的方法是:
SELECT orig FROM q WHERE cost = (SELECT MIN(cost) FROM q WHERE dest = 10);
现在我会用通过上述函数返回的orig
找到先前的点(假设它回来了,说,点5
):
SELECT orig FROM q WHERE cost = (SELECT MIN(cost) FROM q WHERE dest = 5);
我可以继续下去,直到我有15分。
如何进行有效的查询在SQL做到这一点?我的桌子有五千万行。
从查看OP的问题标签,我怀疑MySQL是有问题的RDBMS--据我所知,MySQL不支持递归CTE。 – 2010-10-08 11:18:04