2013-04-24 40 views
0

您好我有一個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

回答

2

我必須撤銷我以前的答案,因爲我以爲你必須明確寫OUTER才能使其成爲外連接。所以ElectricLlama是對的。你必須再次聲明該條款。或者在這種情況下,您可以簡單地刪除LEFT以使其成爲正常連接。

+0

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

1

這是不正確的。由於它是外連接,因此如果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