【发布时间】:2013-04-30 11:21:41
【问题描述】:
这些是我的桌子。
Step
stepid name
a place1
b place2
c place3
d place4
e place5
f place6
Stage
stageid start finish
1 a b
2 b c
3 c d
4 d e
5 e f
Trip
tripid stageid
1 1
1 2
1 3
1 4
1 5
我要实现这个查询结果
tripid stageid
1 place1,place2,place3,place4,place5,place6
我知道如何将所有 id 放入一个字段,以及如何将 id 替换为其指定的名称。但是我不知道如何加入这两种解决方案。
这是我用来将 id 放入一个字段的 sql。
SELECT REPLACE(stageid,'''') as stages
FROM (SELECT SYS_CONNECT_BY_PATH(stageid,' ') stageid, level
FROM trip
START WITH stageid = (select min(stageid) from trip)
CONNECT BY PRIOR stageid < stageid
ORDER BY level DESC)
WHERE rownum = 1;
start和finish是stepid的外键,trip table的stageid是Stage table的stageid的外键 我在 oracle developer ver 3.2 上工作。你能帮忙吗?
【问题讨论】:
-
数据如何到达输出端?在我看来,
tripid = 1应该只给place1,place2,因为start=a和finish=b -
好吧,对于
tripid = 1,我得到1,2,3,4,5,我想用步骤表中的名称替换那些数字。在这种情况下,仅部分显示了行程表。事实上tripid是某个其他表的外键。 -
不是以您不应该用作列名的保留字开头吗?
-
纯示例,无需展示实际的数据库结构。我希望它尽可能容易让“你”理解并可能提供帮助。