【发布时间】:2015-12-17 21:16:08
【问题描述】:
Select *
From cacheAttendanceMeasures cam
Left Join dmcUserSelectedAttendanceMeasures usam on usam.attMeasureID = cam.attMeasureID
And usam.personID = @personID
And usam.pageID = @pageID
我了解上述查询将返回 cacheAttendanceMeasures 中的所有行以及 dmcUserSelectedAttendanceMeasures 和 dmcUserSelectedStudentMonths 中条件匹配的所有行。我真正想做的是:
- 如果左连接不匹配,则返回 cacheAttendanceMeasures 中的所有行 -- 那么它当前正在做什么
- 但是,如果左连接确实匹配,则仅返回 cacheAttendanceMeasures 中匹配的行
这可能吗?
编辑: 我将上面的查询简化为只包含一个 Left Join 表,我不想让问题过于复杂。
以下是我希望根据表之间没有匹配项与是否存在匹配项返回的数据集示例:
凸轮表
cID attMeasureID 值
1 1 530
2 2 95.7
3 3 380
4 4 742.57
5 5 200
usam 表
uID personID pageID attMeasureID
1 877450 31 1
2 923450 28 2
3 877450 31 3
4 369842 28 4
5 212193 25 1
@personID = 577597 & @pageID = 20 时返回的数据集:
CID attMeasureID 值 uID pageID attMeasureID
1 1 530 null nul null
2 2 95.7 null null null
3 3 380 null null null
4 4 742.57 null null null
5 5 200 null null null
@personID = 877450 & @pageID = 31 时返回的数据集:
CID attMeasureID 值 uID personID pageID attMeasureID
1 1 530 1 877450 31 1
3 3 380 3 877450 31 3
【问题讨论】:
-
也许你的意思是这样的:
where dmcUserSelectedAttendanceMeasures is not null例如,我不知道你是否希望两个左连接表都为空,我只是用这个例子来做一个......但它看起来像 1和 2 是互斥的。提供所有三个表的一些示例预期输出,以帮助阐明您的目标。假设 T1、T2、T3 表名:如果 T1 和 T2 中的记录而不是 T3 中的记录...显示什么?如果 T1 和 T3 中的记录显示什么?如果 T1、T2、T3 中的记录显示什么,如果仅在 T1 中显示什么?也许您只需要在 personID 和 pageID 上加入 ussm 并在第一个左侧进行限制 -
感谢您的快速回复!我正准备下班,但明天会提供更多细节……但希望这会有所帮助:此查询会将数据提供给 html 报告。正在联接的两个表存储用户指定的过滤器。例如,有六种出勤率:出勤率、注册总天数、缺勤总天数等。如果用户只想查看出勤率,他们可以选择这就是我想要返回的全部内容。如果他们没有选择过滤器,那么我想返回所有内容。
标签: sql-server tsql join