无论其他表中是否有数据,都返回一个表中的所有行。使用Where子句

时间:2014-06-03 10:09:07

标签: sql sql-server ssrs-2008-r2

我有一个处理针对资源的预订的数据库。我正在使用SSRS 2008 r2。我确保可视化设计器中的所有连接都显示RESOURCES表上的所有行。

如何返回RESOURCES表中的所有行,而不管其他连接表中的数据是什么?我正在使用带有开始日期和结束日期参数的WHERE子句。这些参数引用reservations表上的日期。如果我从WHERE子句中删除它,我会得到所有RESOURCES。但是我需要包含开始日期和结束日期,以便我可以在两个日期之间进行搜索。我想如果我在resources表上留下了外连接,我就会获得所有资源。但是,仅在开始日期和结束日期之间获取具有相关预留的资源。

我做错了什么?

SELECT

(这里有行)

FROM            
_ReservationsAttributes 
RIGHT OUTER JOIN
  _Reservations ON _ReservationsAttributes.ReservationId = _Reservations.ReservationId   
RIGHT OUTER JOIN 
  _Resources ON _Reservations.ResourceId = _Resources.ResourceId 
LEFT OUTER JOIN
  _LocationsAttributes ON _Resources.LocationId = _LocationsAttributes.LocationId 
                           LEFT OUTER JOIN
  _Locations ON _Resources.LocationId = _Locations.LocationId 
LEFT OUTER JOIN
  _ResourcesAttributes ON _Resources.ResourceId = _ResourcesAttributes.ResourceId
WHERE
  (_LocationsAttributes.[@33] = @Distinct_Premise) AND 
  (_Reservations.StartDate >= @Start_Date) AND 
  (_Reservations.EndDate <= DATEADD(DAY, 1, @End_Date))
ORDER BY 
  _Locations.OrderBy, 
  _Resources.Name 

1 个答案:

答案 0 :(得分:0)

解构您的查询。从仅中央表(_Resources)开始。使用WHERE条件一次添加其他每个表。在添加下一个表之前,请确保每个步骤都有意义。

我的猜测 - 您使用LEFT OUTERRIGHT OUTER联接感到困惑。我们需要架构来确定。