我需要一些关于SQL查询的帮助。 Type,ProcessID和ParentProcessID是表的列。我需要做的是搜索Type" P"。然后,获取它的ProcessID。一旦我拥有它的ProcessID,我需要获得Type" S"的所有过程。由Type" P"的过程产生。例如:
Type ProcessID ParentProcessID
------------------------------------
P 1001049 1000052
S 1001050 1001049
S 1001051 1001049
S 1001052 1001049
S 1001053 1001049
P 1002015 1000045
S 1002016 1002015
S 1002017 1002015
S 1002018 1002015
S 1002019 1002015
我可以写一个伪代码,但我对SQL没有任何想法。
select * from table where Type=P...
... ...
任何想法都将不胜感激。
答案 0 :(得分:2)
天真的解决方案:
select *
from table as Spawns
where Spawns.Type = 'S' and Spawns.ParentProcessID in (
select Parents.ProcessID
from table as Parents
where Parents.Type = 'P'
)
答案 1 :(得分:2)
您可以使用EXISTS
获取结果集
select *
from table as Spawns
where Spawns.Type = 'S' and EXISTS (
select 1
from table as Parents
where Parents.Type = 'P'
and Spawns.ParentProcessID =Parents.ProcessID
)
答案 2 :(得分:2)
在Sql Server中,我喜欢使用公用表表达式(CTE)。它可以帮助保持查询的不同元素。
With GetProcess as (
select ProcessID
from tableA
where Type = 'P')
select S.ProcessID
from tableA S
join GetProcess P on S.processId = P.ProcessID
where S.type = 'S'
因此,CTE获取您的processIDs,其中type = P.然后,再次将它连接到您的表格并找到'S'类型。