可能是一个垒球问题,因为我对SQL非常糟糕。基本上,我有一个每个用户有多行的表。我正在尝试构建一个查询来选择用户,如果他们具有该表中的某些值,也不会选择那些具有特定值的用户。
###User Table
(ID)
###Device Table
(ID, UserID, Type)
所以基本上,我想只查询设备表中至少有1行的用户,这些用户具有类型1,2或3.但是如果用户有1或者4,则不要选择4或5 ,2或3.
它必须与SQL Server和Compact一起使用。
答案 0 :(得分:2)
您可以使用exists
和not exists
:
select u.*
from users u
where exists (select 1 from devices d where d.userid = u.id and d.type in (1, 2, 3)) and
not exists (select 1 from devices d where d.userid = u.id and d.type in (4, 5, 6));
或者,您可以直接在devices
上执行此操作:
select userid
from devices
group by userid
having sum(case when type in (1, 2, 3) then 1 else 0 end) > 0 and
sum(case when type in (4, 5, 6) then 1 else 0 end) = 0;
答案 1 :(得分:0)
从用户中选择* 其中ID不在(从设备中选择(4,5,6)中的用户ID)