加入不产生结果

时间:2017-10-03 10:34:18

标签: sql sql-server join

我有每日数字视图和月度数字视图。

每日观点:

 SELECT * (includes sum)
 FROM
 Person
 FULL OUTER JOIN Profit 
 ON Person.id = Profit.id
 AND Profit.[DATE] = CAST(getdate () -1  as Date)

现在返回70行。

每月观点:

 SELECT * (includes sum)
 FROM
 Person
 FULL OUTER JOIN Profit
 ON Person.id = profit.id
 WHERE 
 [DATE] BETWEEN CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + 
 CAST(YEAR(GETDATE()) AS VARCHAR)
 AND  GETDATE()

这将返回40行。

现在在我的select语句中,我想从每日视图返回所有行,无论月视图中是否有匹配。

现在我认为这样的事情会奏效:

 SELECT *
 FROM  
 DailyView
 LEFT JOIN
 MonthlyView
 ON DailyView.id = MonthlyView.id

但这只会返回40行。我也尝试过全外连接,但这仍然只返回40行。这可能是什么原因?感谢

2 个答案:

答案 0 :(得分:2)

您的WHERE子句正在撤消outer join

您可以通过将条件移至ON子句并删除WHERE子句来解决问题。

您的查询在使用FULL OUTER JOIN时存在疑问。在明确定义的密钥上连接表时,通常不需要FULL OUTER JOIN

答案 1 :(得分:0)

每月视图必须

SELECT * (includes sum)
 FROM
 Person
 FULL OUTER JOIN Profit
 ON Person.id = profit.id
 AND [DATE] BETWEEN CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + 
 CAST(YEAR(GETDATE()) AS VARCHAR)
 AND  GETDATE()