如何编写复杂的查询

时间:2015-02-02 22:22:01

标签: sql sql-server

我需要一些关于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...

...  ...

任何想法都将不胜感激。

3 个答案:

答案 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'类型。