2013-07-27 4 views
2

В основном мне нужно комбинировать результат этих двух запросов, в которых PSROLEUSER равен в обеих таблицах. Как мне это сделать?Объединение двух запросов в SQL

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

Какая система базы данных вы используете? –

+0

В вашем примере есть только одна таблица, а не две. –

ответ

2

Вот такой подход, который ставит всю логику в предложении 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; 

Мне нравится этот подход, поскольку он является достаточно общим. Например, если вы хотите все '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; 
+0

Да! Спасибо, я приму это через 4 минуты. +1 меня :) –

2

Запрос ниже предполагает, что ROLENAME является уникальным для каждого PSROLEUSER.

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

Нет, это не сработает, потому что IN в основном OR. Мне нужен PSROLEUSER, чтобы в основном иметь NCC_Manag и HRM-Content Admin –

+0

oh см. Мое обновление. –

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

Предполагая, что они возвращают ту же схему, только объединение них.

1

Другой способ:

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 
1
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME in('NCC_Manag','HRM-Content Amin') 

Попробуйте этот код

0

Также вы можете использовать другой вариант с 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 
      ) 

Посмотреть демо на SQLFiddle

0
select distinct psroleuser from psroleuser where rolename = 'NCC_Manag' 
and psroleuser in 
(select psroleuser from psroleuser where rolename = 'HRM-Content Amin') 
Смежные вопросы