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

时间:2015-02-27 20:45:09

标签: sql sql-server union

也许我正在接近整个问题 - 或者效率低下。

基本上,我试图根据两个标准组合两个数据视图,其中一个是日志表:

  1. RoomName字段匹配
  2. 时间戳匹配
  3. vw_FusionRVDB_Schedule(RoomName,StartTime,EndTime,Subject等) 其中包含所有索引房间的事件计划 - UTC时间。

    vw_FusionRVDB_DisplayUsageHistory(RoomName,OnTime,OffTime等) 这是一个已配对的活动日志,仅在房间显示开启和关闭时显示 - 以UTC为单位。

    我希望将显示的开/关活动与记录的活动发生时在会议室中安排的事件进行匹配。

    查询非常长,包含很多派生字段。希望只关注加入部分会更清楚。

    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
    

    此查询效果很好。根据设计,一些事件不止一次列出。当在同一事件的窗口内发生多个开/关显示周期时,会发生这种情况。类似地,如果在一个事件之前或期间打开房间显示并通过后续事件保持打开,则在第一个和第二个事件记录上使用来自该单个日志条目的数据。因此,此查询正在完成此方面所需的操作。

    但是,我还想在vw_FusionRVDB_DisplayUsageHistory中添加回输出的预定事件(来自vw_FusionRVDB_Schedule视图),这些事件没有相应的记录活动。

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

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

1 个答案:

答案 0 :(得分:0)

HepC在评论中回答。我让结果让我感到困惑。左连接就是这个伎俩。