SQL如何?从一个表中选择所有项目,并根据另一个表填写空白?

时间:2012-12-10 15:30:15

标签: sql sql-server-2008

首先,感谢您抽出时间阅读本文,请原谅标题,我不太清楚如何描述我的问题。

我有两张桌子。一个用于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 ---------------------错误 // - 不在权限表中,默认错误创建

再次,非常感谢您的时间,如果您不完全理解我想要实现的目标,请告诉我。

罗布

3 个答案:

答案 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