Sql 如何编写复杂查询
我需要一些关于SQL查询的帮助。类型、ProcessID和ParentProcessID是表的列。我需要做的是搜索类型“P”。然后,获取它的ProcessID。一旦我有了它的ProcessID,我就需要得到由类型为“P”的进程生成的所有类型为“s”的进程。例如:Sql 如何编写复杂查询,sql,sql-server,Sql,Sql Server,我需要一些关于SQL查询的帮助。类型、ProcessID和ParentProcessID是表的列。我需要做的是搜索类型“P”。然后,获取它的ProcessID。一旦我有了它的ProcessID,我就需要得到由类型为“P”的进程生成的所有类型为“s”的进程。例如: Type ProcessID ParentProcessID ------------------------------------ P 1001049 1000052 S 1001050 1001049
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...
。。。
任何想法都将不胜感激。简单解决方案:
select *
from table as Spawns
where Spawns.Type = 'S' and Spawns.ParentProcessID in (
select Parents.ProcessID
from table as Parents
where Parents.Type = 'P'
)
朴素的解决方案:
select *
from table as Spawns
where Spawns.Type = 'S' and Spawns.ParentProcessID in (
select Parents.ProcessID
from table as Parents
where Parents.Type = 'P'
)
您可以使用
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
)
您可以使用
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
)
在SQLServer中,我喜欢使用公共表表达式。它有助于保持查询的不同元素的直截了当
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会在type=p的位置获取您的ProcessID。然后,再次将其连接到表中,并查找“S”类型。在Sql Server中,我喜欢使用公共表表达式。它有助于保持查询的不同元素的直截了当
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在type=p的位置获取您的ProcessID。然后,再次将其加入到您的表中并查找“S”类型。谢谢Mihai,我要编辑它。谢谢Mihai,我要编辑它。我想您需要使用
Parents.ProcessID
列映射到Spawns.ParentProcessID
,由于您需要映射子查询中标识的线程生成的派生线程。@Smutje,我还有一个问题(添加为另一个解决方案)与我的建议。有什么想法吗?Thnks!我认为您需要使用Parents.ProcessID
列映射到Spawns.ParentProcessID
,因为您需要映射子查询中标识的线程所生成的派生线程。@Smutje,我还有一个问题(作为另一个解决方案添加)和我的建议。有什么想法吗?Thnks!谢谢大家,我会试试这个。但是,我想了解更多…这是PL/SQL吗?谢谢谢谢大家,我会试试这个。但是,我想了解更多…这是PL/SQL吗?谢谢