首先,感谢您抽出时间阅读本文,请原谅标题,我不太清楚如何描述我的问题。
我有两张桌子。一个用于SystemUsers,另一个用于PrintingPermissions。
PrintingPermissions表
ID ---- SystemUserID --- PrintGroupTypeID --- CanPrint
1 ----------- 22 ------------------------- 1 ----------- --------真
2 ----------- 22 -------------------------- 2 ------- ------------真
3 ----------- 22 ------------------------- 3 -------- -----------假
4 ----------- 23 ------------------------- 1 -------- -----------真
SystemUsers表
ID ----------- 名称
22 -----------罗伯特
23 -----------约翰
24 -----------西蒙
25 -----------凯特
我需要一个select查询,它将根据PrintingPermissions.PrintGroupTypeID生成所有用户及其及其PrintPermissions的列表。 需要注意的是,如果用户未列在PrintPermissions表中,我仍然希望创建其对象,但CanPrintValue为FALSE或NULL。
即。选择WHERE PrintGroupTypeID = 1时,上面提供的表数据的输出应如下所示。
RESULT(WHERE PrintGroupTypeID = 1)
名称 ----- SystemUserID ----- CanPrint
Robert --------- 22 -------------------- True
John ----------- 23 --------------------- True
Simon --------- 24 ---------------------错误 // - 不在权限表中,默认为false已创建
Kate ----------- 25 ---------------------错误 // - 不在权限表中,默认错误创建
再次,非常感谢您的时间,如果您不完全理解我想要实现的目标,请告诉我。
罗布
答案 0 :(得分:1)
SELECT DISTINCT su.Name, su.ID, ISNULL(pp.CanPrint, CAST 0 AS BIT) as CanPrint
FROM SystemUser su
LEFT JOIN Printing Permissions pp ON su.ID = pp.SystemUserID AND pp.PrintGroupTypeID = @TargetPrintGroupTypeID
如果您想要null而不是false,则可以省略ISNULL函数并直接选择CanPrint。这将为您提供三个状态结果(true,false,null),并允许您确定哪些用户不被允许(false)以及哪些用户不在打印组中(null)。
答案 1 :(得分:1)
怎么样:
Select s.name as name,
s.id as SystemUserID,
isnull(p.canprint, 'false') as CanPrint
From systemusers s
Left outer Join printingpermissions p on s.id = p.systemuserid
Where p.printgrouptypeid = 1
答案 2 :(得分:1)
好的,我刚刚设法解决了这个问题。
以下是查询:
SELECT SystemUsers.Name, ISNULL(PrintingPermissions.CanPrint, 'FALSE') AS CanPrint
FROM SystemUsers LEFT OUTER JOIN
PrintingPermissions ON SystemUsers.ID = PrintingPermissions.SystemUserID AND
PrintingPermissions.PrintingGroupTypeID = @ID