将JOIN中的条件转移到SQL中的下一个JOIN?

问题描述:

您好我有一个SQL查询,我坚持一个条件,因为我是新来sql将JOIN中的条件转移到SQL中的下一个JOIN?

select * from Today 
LEFT JOIN 
     TABLEPricing Yesterday ON 
     Yesterday.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date)) 
LEFT JOIN Prev ON 
     Prev.Date = Yesterday.Date 

在第二个条件Prev.Date = Yesterday.DateYesterday.Date采取先前自动分配表达式Yesterday.DateYesterday.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date))

或我需要再次指定如下所示的相同条件。

Prev.Date = (select top 1 date from #Dates where MONTH(DATE) = MONTH(Today.Date)-1 AND YEAR(DATE) = YEAR(Today.Date)) 

请澄清我很困惑。

+0

更新的问题我错过了它 – Neo 2013-04-24 08:13:52

我必须撤销我以前的答案,因为我以为你必须明确写OUTER才能使其成为外连接。所以ElectricLlama是对的。你必须再次声明该条款。或者在这种情况下,您可以简单地删除LEFT以使其成为正常连接。

+0

非常感谢您的澄清.. – Neo 2013-04-24 08:12:06

这是不正确的。由于它是外连接,因此如果TABLEPricing上没有匹配项,则Yesterday.Date中的值将为NULL。所以你下一次加入Prev将无法​​匹配任何东西。

由于您使用的是外连接,因此确实需要使用完整表达式。

我相信你可以重写这个以提高效率。你是否想要识别前一个月?它是基于一个日历月吗?

+0

外连接在哪里? – Devolus 2013-04-24 08:33:08

+0

'LEFT JOIN'是一个左外连接 – 2013-04-24 08:33:43

+0

你是对的。我以为你必须明确写OUTER。 – Devolus 2013-04-24 08:38:13