SQL查询在X值而不是Y值中的位置

时间:2018-04-13 16:56:06

标签: sql sql-server

可能是一个垒球问题,因为我对SQL非常糟糕。基本上,我有一个每个用户有多行的表。我正在尝试构建一个查询来选择用户,如果他们具有该表中的某些值,也不会选择那些具有特定值的用户。

###User Table
(ID)
###Device Table
(ID, UserID, Type)

所以基本上,我想只查询设备表中至少有1行的用户,这些用户具有类型1,2或3.但是如果用户有1或者4,则不要选择4或5 ,2或3.

它必须与SQL Server和Compact一起使用。

2 个答案:

答案 0 :(得分:2)

您可以使用existsnot 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)