SQL:选择用户标识,如果一项具有特定值,则排除所有用户标识

时间:2018-11-24 05:07:09

标签: sql select

My database

嗨,

看我所附的图片。我试图选择所有没有角色ID为1的用户ID。因此,我希望查询返回用户ID 6、13和15。但是,当我对此使用查询时,它也会返回用户ID 5,因为它有2个条目,其中一个条目的角色ID为3。是否有排除UserID 5的原因,因为它与RoleID为1关联?

SELECT UserID
FROM UserTable (example)
WHERE RoleID <> 1

谢谢。

3 个答案:

答案 0 :(得分:3)

SELECT UserID
FROM UserTable (example)
WHERE UserID not in (SELECT UserID FROM UserTable (example) WHERE RoleID = 1)

首先,我们选择所有RoleID = 1的用户,然后选择他们的用户ID,然后选择不在第一个列表中的所有用户。

答案 1 :(得分:2)

不存在

select t.UserID from UserTable  t
where not exists ( select 1 from UserTable t1 
                   where t1.Userid=t.userid and Roleid=1
                  )

答案 2 :(得分:0)

如果只需要userId,请使用group byhaving

SELECT UserID
FROM UserTable 
GROUP BY UserId
HAVING SUM(CASE WHEN RoleID = 1 THEN 1 ELSE 0 END) = 0;

这会选择每个(合适的)UserId 一次-这似乎是您要的。

HAVING子句计算的角色数为“ 1”。 = 0说不存在。