これは、set-within-sets クエリの例です。これは非常に柔軟なアプローチであるため、私はこれに having 句を使用して集計を使用するのが好きです。
select ReleaseId
from ReleaseTerritoryPrice
group by ReleaseId
having (sum(case when territoryId = 62 then 1 else 0 end) > 0 and
sum(case when territoryId = 69 then 1 else 0 end) > 0
) and
(sum(case when territoryId = 200 then 1 else 0 end) = 0 and
sum(case when territoryId = 92 then 1 else 0 end) = 0
)
句の各条件は、having
各地域の行数をカウントしています。最初の 2 つは、62
and69
が存在する必要があることを示しています (カウントが 1 より大きい)。200
最後の 2 つは存在しないと言ってい92
ます (カウントは 0)。
例として、これを変更して、62
との 1 つだけ69
が必要で、他の 2 つが不要な場合、having
句は次のようになります。
having (sum(case when territoryId = 62 then 1 else 0 end) > 0 or
sum(case when territoryId = 69 then 1 else 0 end) > 0
) and
(sum(case when territoryId = 200 then 1 else 0 end) = 0 and
sum(case when territoryId = 92 then 1 else 0 end) = 0
)