2011-09-12 48 views
0

我已经继承了一个模式,我需要得到一些SQL的工作。这是显示一个产品变化,如跳线的颜色和尺寸变体。该模式对产品1个表:多次加入表的LINQ问题

表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 

这样的变化值可以包含一种颜色或大小取决于variationtypeid

所以为什么这个查询失败?

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)) 
+0

它是如何“失败”?错误信息? –

回答

2

如果失败你的意思是你的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子句中让你的外连接的行为就像内连接一样。

+0

+1 ........................................... –

+0

感谢它是更好的工作,但它只显示大小而不显示颜色 –

+0

@Andy - 正如你已经编写了你的​​查询和结构化你的数据,你会得到不同行结果的大小和颜色。如果您可以提供表格的一些示例数据以及期望的输出应该是什么,也许我或其他人可以更改查询,以便它可以做到您想要的。 –