SQL 将不匹配的 Join 结果添加到输出

SQL Adding unmatched Join results to output

也许我对整个问题的处理是错误的 - 或者效率低下。

本质上,我试图结合两种数据视图,其中一种是日志 table,基于 2 个标准:

  1. 房间名称字段匹配
  2. 时间戳匹配

vw_FusionRVDB_Schedule(房间名称、开始时间、结束时间、主题等) 这包含所有索引房间的事件时间表 - UTC 时间。

vw_FusionRVDB_DisplayUsageHistory(房间名称、开启时间、关闭时间等) 这是 activity 的日志,已配对显示房间显示屏何时打开和关闭 - 时间为 UTC。

我想将显示 on/off 活动与记录的活动发生时在房间内安排的活动相匹配。

查询真的很长,并且包含很多派生字段。希望只关注连接部分会使它更清楚。

SELECT <foo>
FROM dbo.vw_FusionRVDB_Schedule
  INNER JOIN dbo.vw_FusionRVDB_DisplayUsageHistory
  ON dbo.vw_FusionRVDB_Schedule.RoomName =  
        dbo.vw_FusionRVDB_DisplayUsageHistory.RoomName
  AND dbo.vw_FusionRVDB_Schedule.EndTime >=
        dbo.vw_FusionRVDB_DisplayUsageHistory.OnTime
  AND dbo.vw_FusionRVDB_Schedule.StartTime <=
        dbo.vw_FusionRVDB_DisplayUsageHistory.OffTime

此查询运行良好。按照设计,某些事件会被多次列出。当同一事件的 window 内出现多个 on/off 显示周期时,就会发生这种情况。类似地,如果房间显示器在一个事件之前或期间打开并在随后的事件中保持打开状态,则来自该单个日志条目的数据将用于第一个和第二个事件记录。所以这个查询正是在做这方面所需要的。

但是,我还想将在 vw_FusionRVDB_DisplayUsageHistory 中没有相应记录活动的计划事件(从 vw_FusionRVDB_Schedule 视图)添加回输出。

我在 vw_FusionRVDB_Schedule 视图的另一个查询中尝试了 UNION 的各种形式,其中的空值以及从 vw_FusionRVDB_DisplayUsageHistory 视图获取或派生的字段。但它会重新添加所有计划的活动 - 而不仅仅是那些与初始加入不匹配的活动。

如果需要,我可以提供更多详细信息。提前谢谢你。

HepC 在评论中回答。我让结果让我感到困惑。左连接成功了。