2017-01-11 1 views
1

내 응용 프로그램에 사용자 테이블이 있습니다.SQL 쿼리 최적화

Id Name ParentId 
1 User1 0 
2 User2 1 
3 User3 1 
4 User4 2 
5 User5 2 

사용자는 grandparent-> parent-> child와 같은 관계가 있습니다. 내가

select * from user where ParentId=1 or ParentId in(select id from user where ParentId=1) 

는 이러한 사용자가 내 역할 테이블과 사용자가 갖는 규칙의 수를 가져 오는 여러 역할을 다음 쿼리를 사용하고 웅대 한 부모와 관련된 사용자를 가져 오기 위해, 나는 select count(*) from group where userId=1을 사용하고 있습니다.

Id Role UserId 
1 Role 1 1 
2 Role 2 1 
3 Role 3 2 
4 Role 4 2 
5 Role 5 3 

이 두 데이터를 단일 쿼리로 가져와야합니다. SQL에 만족스럽지 않고 첫 번째 쿼리가 완벽하지 않습니다. 이것을 어떻게 할 수 있습니까?

+1

'이 두 데이터를 단일 쿼리로 가져와야합니다.'=> 어떻게? 샘플 데이터를'group' 테이블로도 줄 ​​수 있고 그 결과에 따라 기대되는 결과를 보여줄 수 있습니까? – Utsav

답변

1

귀하의 쿼리는 역할 테이블과 조인하면됩니다.

SELECT u.id, count(r.id) no_of_roles 
FROM user u left join roles r 
on u.id = r.userid 
WHERE u.ParentId=1 
OR u.ParentId IN 
    (SELECT id FROM t WHERE ParentId=1 
) 
group by u.id;