如果满足条件,加入相关实体表?

时间:2013-08-04 09:24:18

标签: sql sql-server tsql sql-server-2008-r2

我有2个表,ProductTypesProductTypesTranslations。在ProductTypes我有

ID  Name

和我的ProductTypesTranslations,

ID  ProductTypeID   LanguageID  Name

现在我需要抓取ProductTypes.Name if 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

1 个答案:

答案 0 :(得分: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 ,但这不是问题,因为@P之前的SELECT值已经是NULL