简体   繁体   English

在SQL中合并两个查询

[英]Combining Two Queries in SQL

Basically I need to combine the result of these two queries where the PSROLEUSER is equal in both tables. 基本上,我需要合并两个表中PSROLEUSER相等的两个查询的结果。 How would I do this? 我该怎么做?

select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'NCC_Manag';
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin';

The query below assumes that ROLENAME is unique for every PSROLEUSER . 下面的查询假定ROLENAME对于每个PSROLEUSER都是唯一的。

SELECT  PSROLEUSER 
FROM    sysadm.PSROLEUSER 
WHERE   ROLENAME IN ('NCC_Manag', 'HRM-Content Amin')
GROUP   BY PSROLEUSER
HAVING  COUNT(*) = 2

Here is an approach that puts all the logic in the having clause: 这是一种将所有逻辑放在having子句中的方法:

select PSROLEUSER
from sysadm.PSROLEUSER 
group by PSROLEUSER
having sum(case when ROLENAME = 'NCC_Manag' then 1 else 0 end) > 0 and
       sum(case when ROLENAME = 'HRM-Content Amin' then 1 else 0 end) > 0;

I like this approach because it is quite general. 我喜欢这种方法,因为它很笼统。 For instance, if you wanted all 'NCC_Manag' that are not 'HRM_Content Amin' , you would do: 举例来说,如果你希望所有'NCC_Manag' 不在 'HRM_Content Amin' ,你会怎么做:

select PSROLEUSER
from sysadm.PSROLEUSER 
group by PSROLEUSER
having sum(case when ROLENAME = 'NCC_Manag' then 1 else 0 end) > 0 and
       sum(case when ROLENAME = 'HRM-Content Amin' then 1 else 0 end) = 0;

Another way: 其他方式:

select X.PSROLEUSER from
(select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'NCC_Manag') X inner join 
(select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin') Y
on X.PSROLEUSER = Y.PSROLEUSER
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME in('NCC_Manag','HRM-Content Amin')

试试这个代码

select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'NCC_Manag'
UNION
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin'

Assuming they return the same schema, just union them. 假设它们返回相同的架构,只需对其进行合并。

Also you can use another version with EXISTS operator. 您也可以将另一个版本与EXISTS运算符一起使用。

SELECT t1.PSROLEUSER
FROM sysadm.PSROLEUSER t1
WHERE t1.ROLENAME = 'NCC_Manag'
  AND EXISTS (
              SELECT 1
              FROM sysadm.PSROLEUSER t2
              WHERE t2.ROLENAME = 'HRM-Content Amin'
                AND t1.PSROLEUSER = t2.PSROLEUSER
              )

See demo on SQLFiddle 参见有关SQLFiddle演示

select distinct psroleuser from psroleuser where rolename = 'NCC_Manag'
and psroleuser in 
(select psroleuser from psroleuser where rolename = 'HRM-Content Amin')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM