0

以下 sql 查询不起作用。

select UserName 
from [User] 
where UserID Like 
      ( select UserID 
        from UserRoles 
        where RoleID =
              ( select RoleID 
                from Roles 
                where RoleName='Manager'
              )
      )

在这里,我们正在使用 3 个表User, UserRoles, Roles。它显示错误如下

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

4

4 回答 4

2

错误的原因是子查询返回多行。

当您有类似a = b或 的条件时a LIKE b,双方都应该是一个项目。如果任一侧是子查询,则应注意子查询始终返回 0 或 1 行(并且永远不会超过一个)。

您可以使用 Joins 重写或将LIKEand更改=IN

select UserName 
from [User] 
where UserID IN                          --- LIKE replaced
      ( select UserID 
        from UserRoles 
        where RoleID IN                  --- equality (=) replaced
              ( select RoleID 
                from Roles 
                where RoleName = 'Manager'
              )
      ) ;
于 2012-07-18T08:21:06.497 回答
1

你需要了解join

SELECT UserName
FROM
     [User]
          inner join UserRoles on [User].UserID=UserRoles.UserID
          inner join Roles on UserRoles.RoleID=Roles.RoleID
WHERE
     RoleName='Manager'
于 2012-07-18T08:19:25.363 回答
0
select 
    UserName 
from 
    [User] as u 
inner join 
    (select UserID from UserRoles where RoleID in (select RoleID from Roles where RoleName='Manager'))
as t on u.userId like t.userid+%'
于 2012-07-18T08:22:26.593 回答
0
  select U.UserName 
        from UserRoles UR join Roles R
        on UR.RoleID=R.RoleID
        join [User] U
        on U.UserID like '%'+UR.UserID+'%'
        where R.RoleName='Manager'
于 2012-07-18T08:34:34.163 回答