Проблема LINQ при объединении таблицы несколько раз - PullRequest
0 голосов
/ 12 сентября 2011

Я унаследовал схему, над которой мне нужно поработать. Это показать вариант продукта, такие как цвет и размер вариантов перемычки. Схема имеет 1 таблицу для продуктов:

ТАБЛИЦА tbl_Product

[ProductID] [int],
[Quantity] [int],
[Title] [nvarchar](500),
[Description] [varchar](max),
[Price] [money]  

и т.д ...

другая таблица в качестве таблицы ссылок для вариантов

ТАБЛИЦА tbl_ProductVariation

[ProductVariationID] [int],
[ProductID] [int] ,
[VariationID] [int]  

и таблица вариантов

ТАБЛИЦА tbl_Variation

[VariationID] [int],
[VariationTypeID] [int] NOT NULL,
[USTitle] [nvarchar](150) NULL,
[UKTitle] [nvarchar](150) NULL

, так что значение варианта может содержать цвет или размер в зависимости от варианта типа

так почему этот запрос не выполняется ??

SELECT [t4].[ProductVariationID], [t5].[UKTitle] AS [Size], 
       [t6].[UKTitle] AS [Colour], [t0].[Title]
FROM [dbo].[tbl_Product] AS [t0]
INNER JOIN [dbo].[tbl_ProductCategory] AS [t1] 
    ON [t0].[ProductID] = [t1].[ProductID]
INNER JOIN [dbo].[vw_ProductImage] AS [t2] 
    ON [t0].[ProductID] = [t2].[ProductID]
INNER JOIN [dbo].[tbl_Brand] AS [t3] 
    ON [t0].[BrandID] = [t3].[BrandID]
INNER JOIN [dbo].[tbl_ProductVariation] AS [t4] 
    ON [t0].[ProductID] = [t4].[ProductID]
LEFT OUTER JOIN [dbo].[tbl_Variation] AS [t5] 
    ON [t5].[VariationID] = [t4].[VariationID]
LEFT OUTER  JOIN [dbo].[tbl_Variation] AS [t6] 
    ON  [t6].[VariationID] = [t4].[VariationID] 
INNER JOIN [dbo].[tbl_Category] AS [t7] 
    ON [t1].[CategoryID] = [t7].[CategoryID]
WHERE ([t5].[VariationTypeID] IN(2))
AND ([t6].[VariationTypeID] IN(1))

1 Ответ

2 голосов
/ 12 сентября 2011

Если под fail вы имеете в виду, что ваш left outer join не работает, вы можете вместо этого попробовать этот запрос.

SELECT [t4].[ProductVariationID],
       [t5].[UKTitle] AS [Size],
       [t6].[UKTitle] AS [Colour],
       [t0].[Title]
FROM   [dbo].[tbl_Product] AS [t0]
       INNER JOIN [dbo].[tbl_ProductVariation] AS [t4]
         ON [t0].[ProductID] = [t4].[ProductID]
       LEFT OUTER JOIN [dbo].[tbl_Variation] AS [t5]
         ON [t5].[VariationID] = [t4].[VariationID] AND
            [t5].VariationTypeID IN(2)
       LEFT OUTER JOIN [dbo].[tbl_Variation] AS [t6]
         ON [t6].[VariationID] = [t4].[VariationID] AND
            [t6].[VariationTypeID] IN(1)

Вместо этого я переместил проверки на VariationTypeID в предложение join. Наличие их в предложении where приводит к тому, что ваше внешнее соединение ведет себя как внутреннее соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...