2013-08-04 31 views
0

我有2個表,ProductTypesProductTypesTranslations。在ProductTypes我如果條件符合,加入相關實體表?

ID Name 

和ProductTypesTranslations我有,

ID ProductTypeID LanguageID Name 

現在我需要搶ProductTypes.Name如果LanguageID 1,否則搶ProductTypesTranslations.Name。有一個0到1的關係。我能做到這一點,

declare @P nvarchar(100) 
declare @LanguageID INT = 1 
IF @LanguageID = 1 
    select @P = P.Name from ProductTypes P WHERE P.ID = 88 
ELSE 
    select @P = PT.Name from ProductTypes P INNER JOIN ProductTypesTranslations PT On P.ID = PT.ProductTypeID WHERE P.ID = 88 

但我想一個SQL的

回答

2

試着這麼做

SELECT @P = CASE @LanguageID WHEN 0 THEN PT.Name ELSE P.Name END 
FROM ProductTypes P 
LEFT JOIN ProductTypesTranslations PT On P.ID = PT.ProductTypeID 
             AND @LanguageID = 0 
WHERE P.ID = 88 

INNER JOIN成爲LEFT JOIN即只在AND @LanguageID = 0 「激活」。

要放入@P的字段的選擇由CASE製作。

當您將INNER JOIN更改爲LEFT JOIN時,您需要必須注意兩者之間的區別。例如,在這種情況下,如果失敗,INNER JOIN不會改變@P值,而LEFT JOIN的失敗將使NULL@P,但由於@PSELECT前值已經NULL這是沒有問題的。