2010-08-11 123 views
3

我有一个用户配置文件表,其中列User NameManager和许多其他字段,例如AmountSQL联盟/加入查询

示例记录:

User Manager Amount 
A  B  100 
x  y  200 
B  C  300 
M  N  800 
C  D  500 
P  Q  1000 
D  E  1000 

我试图得到如下结果:

User Manager Amount 
A  B  100 
B  C  300 
C  D  500 
D  E  1000 

基本上,我只是想表明在级联方式的结果让所有的行被提取直到找到用户的层次结构中的所有管理者。有人可以帮忙吗?

============

更新

我设法使用下面的查询来解决这个问题:

WITH rec(c1, c2) 
AS (SELECT c1, c2 FROM table WHERE c2 = 'A' 
UNION ALL 
SELECT table.c1, table.c2 FROM table, rec WHERE table.c2 = rec.c2) 
SELECT c1, c2 FROM rec 

感谢您的帮助。 Abhi。

+0

你能对用户是否可能有多个经理拓展,无论是经理可以有多个用户,以及在这些情况下你需要什么?还是你总是限制你的查询作为一个用户的起点? – Tobiasopdenbrouw 2010-08-11 10:29:44

+0

一个用户只能有一个经理,但一个经理可以是多个用户的经理。 我的出发点是用户A,我想列出层级中的所有管理者。 – 2010-08-11 10:56:54

+0

@Abhi:请将您的解决方案作为答案添加,以便其他人可以在将来更轻松地找到答案。谢谢。 – sarnold 2012-03-20 03:17:41

回答

1

这样做没有“标准”sql,但大多数数据库扩展SQL以拥有这些选项。

在Oracle中,你可以这样做:

SELECT USER, Manager, Amount FROM employees CONNECT BY PRIOR USER = Manager; 

请参阅在一些例子: http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/ 为DB2实例

+0

嗨Guy, Connect By子句在DB2/400中不起作用,但您已经向我显示了路径。我将尝试查找是否有替代DB2/400中的Connect By子句。 谢谢。 – 2010-08-11 10:58:55