我有一个表,如下SQL查询来获取合作相关的值在表
Id Parent_id Dept_id 666 777 D101 555 666 D201 444 555 D301 333 444 D401
我只知道值“D401”。使用这个,我需要找到它的所有相关的id和parent_id。任何人都可以帮助我构建一个查询来获取表中的值。
我有一个表,如下SQL查询来获取合作相关的值在表
Id Parent_id Dept_id 666 777 D101 555 666 D201 444 555 D301 333 444 D401
我只知道值“D401”。使用这个,我需要找到它的所有相关的id和parent_id。任何人都可以帮助我构建一个查询来获取表中的值。
正如@a_horse_with_no_name说,你可以使用CONNECT BY获得层次查询中oracle.If你想获得所有相关的编号,你可以试试这个:
SELECT Id FROM tablename
START WITH Dept_id='D401'
CONNECT BY Id=prior Parent_id
谢谢安格斯..它很安静,简单明了。我得到了我期待的结果! –
您的要求不是很清楚。根据我的理解,你可以简单地使用;
SELECT id,parent_id
FROM tablename
WHERE dept_id =
(SELECT dept_id
FROM deptmaster_tablename
WHERE dept_name ='marketing')
你可以使用递归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。
或者使用'connect by':http://www.sqlfiddle.com/#!4/3c99ff/3 –
@a_horse_with_no_name当然是,您的意见总是有用 – jfun
请注意,使用'递归'有点危险,因为它是一个保留字 - 理论上它是SQL标准所要求的递归cte:'递归cte_name(..)as(...)',但是Oracle忽略了标准的一部分(其他DBMS不) –
http://docs.oracle.com /cd/E11882_01/server.112/e41084/queries003.htm#SQLRF52332 –
那么你想要返回哪些行? – jarlh
感谢兄弟的信息!这很有帮助.. –