特定のコード番号を持っている人の数を取得しようとしています。
以下は私が今していることの例です。
select * from persons where code in ('1', '2', '3', '4', '5')
in
それらの番号を持っているすべての人が表示されますが、それは何も除外しません。それらのコードだけを持ち、他には何もないものを表示する方法がわかりません。
うまくいけば、これはある程度意味があります。
そのためには、すべての数字を見る必要があります。最良の方法はとを使用することgroup by
ですhaving
:
select personid
from person
group by personid
having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0
このhaving
句は、それらのコードではないレコードの数をカウントします。カウントが0の場合、レコードが返されます。
5つのコードがすべて選択されていることを確認する場合は、次の条件を使用します。
having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0 and
count(distinct code) = 5
これは迅速で汚いです、そして私は人のテーブルにIDフィールドの存在を想定しています...
select a.*
from persons a
join (select id,count(*) count
from persons b
where code in ('1','2','3','4','5')
group by id
having count()=1) b
on a.id=b.b.id
*編集:私はこのバージョンが少し好きだと思います:) *
ここでの考え方は、リストからIDが1つだけの個人レコードのみを取得することです。それを同じpersonsテーブルに結合すると、ターゲットリストに値を持つ唯一のレコードがリストされます。