我正在尝试获取具有特定代码编号的人数。
下面是我现在正在做的一个例子。
select * from persons where code in ('1', '2', '3', '4', '5')
in
会向我显示拥有这些数字的所有人,但不排除任何内容。我不知道如何展示那些只有那些代码的东西。
希望这是有道理的。
答案 0 :(得分: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
答案 1 :(得分: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的那些人员记录,因此计数。将其连接回同一个人表,它将列出目标列表中唯一具有该值的记录。