SELECT dbo.Users.Name AS UserName, dbo.UIItems.Name AS ItemName, MIN(DISTINCT dbo.UIItemRestrictions.RestrictionEnum) AS RestrictionEnum, > dbo.Users.Id AS UserId, dbo.UIItems.Id AS ItemId >FROM dbo.Roles INNER JOIN > dbo.UIItemRestrictions ON dbo.Roles.Id = dbo.UIItemRestrictions.RoleId INNER JOIN > dbo.UIItems ON dbo.UIItemRestrictions.UIItemId = dbo.UIItems.Id INNER JOIN > dbo.UserRoles ON dbo.Roles.Id = dbo.UserRoles.RoleId INNER JOIN > dbo.Users ON dbo.UserRoles.UserId = dbo.Users.Id >GROUP BY dbo.Users.Name, dbo.UIItems.Name, dbo.Users.Id, dbo.UIItems.Id>But I don't want to have to create entries in UIItemRestrictions to indicate that there is no restriction. How would I create a query that will return a restriction of 0 if one of the roles to which a user belongs doesn't have an entry in the RoleItems table?
declare @User table (u_id Int, u_name varchar(20), u_role_id int ) insert into @User select 1, 'Joe', 1 union select 2, 'Viv', 2 declare @Role table ( role_id int, role_restriction int ) insert into @Role select 1, 4 union select 1, 5 select u_id, u_name, Isnull(MIN(role_restriction), 0) from @User left join @Role on (u_role_id = role_id ) group by u_id, u_nameOutput
1 Joe 4 2 Viv 0