2012-07-18 5 views
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으로 작업하고 있습니다.

하위 쿼리가 두 개 이상의 값을 반환했습니다. 하위 쿼리가 =,! =, <, < =,>,> = 또는 하위 쿼리가 표현으로 사용되는 경우에는 허용되지 않습니다. 당신은에 대해 배울 필요가

답변

2

을 결합한다.

a = b 또는 a LIKE b 중 하나 인 경우 양면이 하나의 항목이어야합니다. 양측이 하위 쿼리 인 경우 하위 쿼리가 항상 0 또는 1 행 (및 둘 이상)을 반환하지 않도록주의해야합니다. 당신은 조인 또는 LIKE 및 변경과 함께 다시 작성할 수 있습니다

=IN에 : 나는 아마`사용자 이름 앞에 테이블 별칭을 둘 것입니다 : 사소한 nitpick가 비록

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' 
      ) 
    ) ; 
+0

여러 개의 결과를 반환하는 'LIKE'다음에 하위 쿼리가있을 가능성이 높지만 하위 쿼리가 일치하는 두 경우 모두에서 'IN'을 사용하는 것이 좋습니다. –

+0

@AndriyM : 네, 맞습니다. * 또는 하위 쿼리가 식으로 사용될 때 : ... "* 오류의 일부는이 경우 적합합니다. (나는 'LIKE'가 오류 메시지에 나타날 것이라고 생각하지만 그렇지 않다) –

1

는 오류의 원인은 하위 쿼리가 하나 개 이상의 행을 반환하는 것입니다

SELECT UserName 
FROM 
    [User] 
      inner join UserRoles on [User].UserID=UserRoles.UserID 
      inner join Roles on UserRoles.RoleID=Roles.RoleID 
WHERE 
    RoleName='Manager' 
+1

1 '및'RoleName'. –

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+%' 
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' 
관련 문제