SQL where子句奇怪的行为

时间:2014-08-28 16:39:22

标签: sql sql-server tsql

这是来自单个表的简单where子句。问题是我应该得到任何结果。 AND是必要的,因为必须满足这两个条件。第二张表显示应满足条件。

select *
from UserPermissions up
where up.PermissionId = 5 and up.PermissionId = 7

select *
from UserPermissions up
where up.UserId = '40376a15-8b4b-43c0-a174-67f935ec7e8e'

以下是结果。第一个查询不返回任何结果,但选择2显示特定用户的结果。第2行和第3行显示PermissionId应匹配。

enter image description here

对于我所要求的内容,似乎存在一些误解。最有可能是措辞如何。我期待的是为两者 PermissionID为5(一行)和7(另一行)中的每个用户获取一个UserID。

3 个答案:

答案 0 :(得分:7)

原始查询的问题是,您要求返回PermissionId同时等于两个值的结果 - 意味着同一行 - 这是不可能的。

但是,您可以使用UserIDPermissionId =5返回同时包含PermissionId =7 AND GROUP BY的{​​{1}}子句:

HAVING

答案 1 :(得分:5)

好吧OP会为你做什么吗?

select
    a.UserId
from UserPermissions as a
inner join userpermissions as b
    on a.userID = b.userID
    and a.permissionID = 5
    and b.permissionID = 7

答案 2 :(得分:3)

此权限或自我加入将为您提供正确的结果,即在权限列中同时包含5 AND 7的用户。

select up.UserID
from UserPermissions up
where up.PermissionId = 5 
and up.UserID in (Select userID 
                FROM UserPermissions up1 
                where up1.PermissionId = 7
               )