0

特定のコード番号を持っている人の数を取得しようとしています。

以下は私が今していることの例です。 select * from persons where code in ('1', '2', '3', '4', '5')

inそれらの番号を持っているすべての人が表示されますが、それは何も除外しません。それらのコードだけを持ち、他には何もないものを表示する方法がわかりません。

うまくいけば、これはある程度意味があります。

4

2 に答える 2

0

そのためには、すべての数字を見る必要があります。最良の方法はとを使用すること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
于 2013-02-27T20:51:49.320 に答える
0

これは迅速で汚いです、そして私は人のテーブルに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テーブルに結合すると、ターゲットリストに値を持つ唯一のレコードがリストされます。

于 2013-02-27T20:52:20.153 に答える