2015-04-07 35 views
-1

我有一个表,如下SQL查询来获取合作相关的值在表

 
Id  Parent_id  Dept_id 
666  777   D101 
555  666   D201 
444  555   D301 
333  444   D401 

我只知道值“D401”。使用这个,我需要找到它的所有相关的id和parent_id。任何人都可以帮助我构建一个查询来获取表中的值。

+1

http://docs.oracle.com /cd/E11882_01/server.112/e41084/queries003.htm#SQLRF52332 –

+0

那么你想要返回哪些行? – jarlh

+0

感谢兄弟的信息!这很有帮助.. –

回答

0

正如@a_horse_with_no_name说,你可以使用CONNECT BY获得层次查询中oracle.If你想获得所有相关的编号,你可以试试这个:

SELECT Id FROM tablename 
START WITH Dept_id='D401' 
CONNECT BY Id=prior Parent_id 
+0

谢谢安格斯..它很安静,简单明了。我得到了我期待的结果! –

0

您的要求不是很清楚。根据我的理解,你可以简单地使用;

SELECT id,parent_id 
FROM tablename 
WHERE dept_id = 
    (SELECT dept_id 
    FROM deptmaster_tablename 
    WHERE dept_name ='marketing') 
1

你可以使用递归CTE:

with recursive(id,p,d)as 
(
    select Id,Parent_id,Dept_id 
    from tbl where Dept_id='D401' --put the dept id here 
    union all 
    select t.Id,t.Parent_id,t.Dept_id 
    from tbl t join recursive r 
    on t.id=r.p 
) 

select * from recursive 

这里是DEMO

编辑:感谢a_horse_with_no_name,您可以使用connect by也由他提供here is the demo

+0

或者使用'connect by':http://www.sqlfiddle.com/#!4/3c99ff/3 –

+0

@a_horse_with_no_name当然是,您的意见总是有用 – jfun

+0

请注意,使用'递归'有点危险,因为它是一个保留字 - 理论上它是SQL标准所要求的递归cte:'递归cte_name(..)as(...)',但是Oracle忽略了标准的一部分(其他DBMS不) –