我有每日数字视图和月度数字视图。
每日观点:
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行。这可能是什么原因?感谢
答案 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()