セット内の2つのセット(部門内の従業員)を比較しようとしています。
セットベースのアプローチは、テーブルで自己結合を実行し、従業員ごとに照合することです。2つの部門による次のグループ。2つの部門の従業員が同じ場合、すべての従業員が一致します。つまり、一方の部門の従業員がもう一方の部門の従業員と一致しない場合はありません。
句はこのhaving
条件をテストします。
このバージョンのクエリでは、ドライバテーブルを使用して、部門と従業員を照合します。セットが一致しない場合、完全な外部結合には一致しない行があり、これは次のhaving
句で取得されます。
select driver.deptid1, driver.deptid2
from (select d1.deptid as deptid1, d2.deptid as deptid2
from (select distinct deptid from employees) d1 cross join
(select distinct deptid from employees) d2
) driver left outer join
employees e1
on e1.deptid = driver.deptid full outer join
employees e2
on driver.deptid2 = e2.deptid and e1.name = e2.name and e1.salary = e2.salary
group by driver.deptid1, driver.deptid2
having SUM(case when e1.name is null then 1 else 0 end) = 0 and
SUM(case when e2.name is null then 1 else 0 end) = 0