2013-08-04 3 views
0

У меня есть 2 стола, ProductTypes и ProductTypesTranslations. В 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, но это не проблема, так как значение @P до SELECT уже NULL.