如何合并2个SQL查询

时间:2019-11-21 22:23:54

标签: sql

我们有2个SQL查询,用于从用户登录名中查找数据库锁,因为有时我们需要手动将其解锁。简而言之,我们运行以下查询,该查询将返回一些结果:

SELECT DISTINCT request_session_id
FROM [view_name]
WHERE [condition1] AND [condition2]

然后我们一次获取一个结果,并运行以下查询(更新@request_session_id变量之后),直到在结果的主机名列中找到显示正确用户名的行(spid值将对应于request_session_id):

DECLARE @request_session_id int;
SET @request_session_id = 107;

SELECT spid, status, hostname
FROM [view_name]
WHERE spid = @request_session_id

我想完成的(如果可能的话)是将这两个查询结合起来,以便找到request_session_id,然后自动运行第二个查询,显示第一个查询找到的每个ID的结果行。我对SQL还是很陌生,但是我对Powershell很熟悉,因此在Powershell中,我只是将查询1中的结果保存到变量中,然后使用foreach在查询2中循环这些结果。我不确定我如何用SQL达到相同的最终结果。

预先感谢您的帮助。

安德鲁

4 个答案:

答案 0 :(得分:1)

您只是想IN吗?

SELECT spid, status, hostname
FROM [view_name]
WHERE spid IN (SELECT request_session_id
               FROM [view_name]
               WHERE [condition1] AND [condition2]
              );

答案 1 :(得分:1)

我会EXISTS使用相关的子查询。与使用IN的情况不同,这可以正确处理第一个查询返回为空的request_session_id的情况:

SELECT spid, status, hostname
FROM [view_name] v1
WHERE EXISTS (
    SELECT 1
    FROM [view_name] v2
    WHERE 
        [condition1] 
        AND [condition2]
        AND v1.spid = v2.request_session_id
)

注意:很可能两个[view_name]都属于不同的表;否则,逻辑将大大简化。

答案 2 :(得分:0)

就像上面的戈登所说的

SELECT spid, status, hostname
FROM [view_namea]
WHERE spid IN (SELECT request_session_id
               FROM [view_nameb]
               WHERE [condition1] AND [condition2]
              );

答案 3 :(得分:0)

只需使用IN子句来过滤所需的spid值:

SELECT spid, status, hostname
FROM [view_name]
WHERE spid IN (
  SELECT request_session_id
  FROM [view_name]
  WHERE [condition1] AND [condition2]
);

这将返回与spids子查询中的条件匹配的IN的结果。您无需在其中添加DISTINCT,因为那样只会增加额外的处理。