【发布时间】:2013-12-21 08:20:41
【问题描述】:
我需要一些建议,因为我对分层查询很陌生 :( IE。我有下表:
CREATE TABLE routes
(
from VARCHAR2(15),
to VARCHAR2(15),
price NUMBER
);
INSERT INTO routes VALUES('San Francisco', 'Denver', 1000);
INSERT INTO routes VALUES('San Francisco', 'Dallas', 10000);
INSERT INTO routes VALUES('Denver', 'Dallas', 500);
INSERT INTO routes VALUES('Denver', 'Chicago', 2000);
INSERT INTO routes VALUES('Dallas', 'Chicago', 600);
INSERT INTO routes VALUES('Dallas', 'New York', 2000);
INSERT INTO routes VALUES('Chicago', 'New York', 3000);
INSERT INTO routes VALUES('Chicago', 'Denver', 2000);
我想通过层级计算价格,得到如下结果:
FROM TO PRICE
--------------- --------------- -----
San Francisco Dallas 10000 //San Francisco -> Dallas
San Francisco Denver 1000 //San Francisco -> Denver
San Francisco Chicago 10600 //San Francisco --> Dallas --> Chicago (10000 + 600)
San Francisco New York 12000 //San Francisco --> Dallas --> New York (10000 + 200)
San Francisco Chicago 3000 //San Francisco --> Denver --> Chicago (1000 + 2000)
San Francisco Dallas 1500 //San Francisco --> Denver --> Dallas (1000 + 500)
. . .
. . .
. . .
我已经想到,应该使用 CONNECT BY PRIOR 语句并编写了一个贯穿层次结构的查询:
SELECT
CONNECT_BY_ROOT from,
to
FROM routes
CONNECT BY NOCYCLE PRIOR to = from;
我真的可以使用一些帮助来获取价格。
比你!
【问题讨论】:
-
你用的是什么版本?如果是 11gR2 或更高版本,递归子查询分解可能比 CONNECT BY 工作得更好。
标签: sql oracle hierarchical connect-by