NULL时的默认值

时间:2014-07-08 15:00:36

标签: sql sql-server-2008

与我昨天问过Recursive query where anchor and member have unions

的问题有关

我有一个包含

的联结表
menuItem | roleID | userID
1        | 2      | NULL
1        | 5      | NULL
2        | NULL   | 81

我有角色表

roleID | roleName
1      | admin
3      | super admin
5      | basic user

我想要的是查询有权访问此菜单项的用户还包括给管理员用户(roleID 1 and 3)。在链接的问题中,我能够通过在join子句中包含ID来包括管理员用户。但是因为在包含单个用户时,roleID为null,所以我无法获得结果:

userName | menuItem
admin1   | 2
admin2   | 2
realUser | 2

充其量我能够获得

userName | menuItem
realUser | 2
realUser | 2
realUser | 2

如何编写此代码以便将admin用户作为结果的一部分包含在内?感谢。

1 个答案:

答案 0 :(得分:2)

听起来你想加入一个表用户到一个表菜单 什么时候

  • 用户的角色ID为1或3,菜单角色ID为空
  • 或者user表中的userid与userid匹配
  • 或者用户的角色ID与菜单的角色ID
  • 相匹配

所以看起来像这样

From 
       users u
       INNER JOIN Menu m
       ON (u.RoleID in (1,3) and m.roleID  is Null)
          or u.UserId = m.userId
          or u.RoleId = m.RoleId