SQL操作方法?从一个表中选择所有项目,并根据另一个表填补空白



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

我有两张桌子。一个用于SystemUsers,另一个用于PrintingPermissions。

打印权限表

ID----SystemUserID---PrintGroupTypeID---CanPrint
1----------------22-----------------True

2----------------22 2-----------------真正的

3----------------22----------------------------------错误

4----------------23----------------1----------------真正的

系统用户表

ID---------名称
22----------Robert

23---------John

24----------Simon

25----------------Kate

我需要一个选择查询,它将基于PrintingPermissions.PrintGroupTypeID生成所有用户及其PrintPermissions的列表。需要注意的是,如果用户没有列在PrintPermissions表中,我仍然希望创建他们的对象,但CanPrintValue为FALSE或NULL。

即,当选择WHERE PrintGroupTypeID=1时,上面提供的表数据的输出应该如下。

RESULT(其中PrintGroupTypeID=1)

名称----系统用户ID---CanPrint

Robert--------22--------------------真正的

John---------------23--------------------真正的

Simon--------24--------------------错误//--不在权限表中,创建默认错误

Kate----------------25--------------------False//--不在权限表中,创建默认False

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

Rob

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)。

怎么样:

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

好的,我刚刚解决了。

以下是查询:

SELECT        SystemUsers.Name, ISNULL(PrintingPermissions.CanPrint, 'FALSE') AS CanPrint
FROM            SystemUsers LEFT OUTER JOIN
PrintingPermissions ON SystemUsers.ID = PrintingPermissions.SystemUserID AND 
PrintingPermissions.PrintingGroupTypeID = @ID

最新更新