我有2个表,ProductTypes
和ProductTypesTranslations
。在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
答案 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
。