基本的に、PSROLEUSER が両方のテーブルで等しい場合、これら 2 つのクエリの結果を組み合わせる必要があります。どうすればいいですか?
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'NCC_Manag';
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin';
基本的に、PSROLEUSER が両方のテーブルで等しい場合、これら 2 つのクエリの結果を組み合わせる必要があります。どうすればいいですか?
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'NCC_Manag';
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin';
ROLENAME
以下のクエリは、がすべての に対して一意であると想定していますPSROLEUSER
。
SELECT PSROLEUSER
FROM sysadm.PSROLEUSER
WHERE ROLENAME IN ('NCC_Manag', 'HRM-Content Amin')
GROUP BY PSROLEUSER
HAVING COUNT(*) = 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;
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME in('NCC_Manag','HRM-Content Amin')
このコードを試してください
別の方法:
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 = 'NCC_Manag'
UNION
select PSROLEUSER from sysadm.PSROLEUSER where ROLENAME = 'HRM-Content Amin'
それらが同じスキーマを返すと仮定すると、それらを結合するだけです。
select distinct psroleuser from psroleuser where rolename = 'NCC_Manag'
and psroleuser in
(select psroleuser from psroleuser where rolename = 'HRM-Content Amin')
また、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