0

我有 2 张桌子,ProductTypes并且ProductTypesTranslations. 在 ProductTypes 我有

ID  Name

在我拥有的 ProductTypesTranslations 中,

ID  ProductTypeID   LanguageID  Name

现在我需要获取ProductTypes.Nameif 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

4

1 回答 1

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 的字段的选择由 a 进行CASE

当您将 an 更改INNER JOIN为 a时LEFT JOIN,您必须了解两者之间的区别。例如,在这种情况下,INNER JOINon failure 不会更改 的值@P,而 the 的失败LEFT JOIN将放入NULL@P但这不是问题,因为@Pbefore 的值SELECT已经是NULL

于 2013-08-04T09:27:12.590 回答