2011-09-12 38 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 - 正如你已經編寫了你的​​查詢和結構化你的數據,你會得到不同行結果的大小和顏色。如果您可以提供表格的一些示例數據以及期望的輸出應該是什麼,也許我或其他人可以更改查詢,以便它可以做到您想要的。 –