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ます。次のようなエラーが表示されます

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

4

4 に答える 4

2

エラーの理由は、サブクエリが複数の行を返すことです。

a = bまたはのような状態の場合はa LIKE b、両面を1点としてください。いずれかの側がサブクエリである場合、サブクエリが常に 0 または 1 行を返すように注意する必要があります (複数の行は決して返されません)。

Joins で書き直すか、LIKEと を に=変更でき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

結合について学ぶ必要があります

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 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 に答える
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 に答える