我有一個非常簡單的架構的表:走一棵樹向後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