优化SQL查询

时间:2017-01-11 17:03:03

标签: sql sql-server

我的应用程序中有一个用户表。

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

用户有祖父母 - >父母 - >孩子的关系。使用以下查询

获取与祖父母相关的用户
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 个答案:

答案 0 :(得分: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;