2011-09-12 8 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 - クエリを書いてデータを構造化したので、結果の異なる行にサイズと色が表示されます。テーブルのサンプルデータをいくつか用意しておけば、予想される出力が何かになるはずです。誰か他の人がクエリを変更して、それがあなたが望むようにすることができます。 –

関連する問題