多次连接表的 LINQ 问题
我继承了一个模式,我需要使用它来处理一些sql。它是为了展示产品的变化,例如毛衣的颜色和尺寸变化。该架构有 1 个产品表:
TABLE tbl_Product
[ProductID] [int],
[Quantity] [int],
[Title] [nvarchar](500),
[Description] [varchar](max),
[Price] [money]
等...
另一个表作为变体的链接表
TABLE tbl_ProductVariation
[ProductVariationID] [int],
[ProductID] [int] ,
[VariationID] [int]
和变体表
TABLE 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))
I have inherited a schema which I need to get some sql working on. It is to show a products variation such as colour and size variants of jumper. The schema has 1 table for products :
TABLE tbl_Product
[ProductID] [int],
[Quantity] [int],
[Title] [nvarchar](500),
[Description] [varchar](max),
[Price] [money]
etc...
another table as a linking table for the variations
TABLE tbl_ProductVariation
[ProductVariationID] [int],
[ProductID] [int] ,
[VariationID] [int]
and the variation table
TABLE tbl_Variation
[VariationID] [int],
[VariationTypeID] [int] NOT NULL,
[USTitle] [nvarchar](150) NULL,
[UKTitle] [nvarchar](150) NULL
so the variation value can contain a colour or a size depending on the variationtypeid
so why does this query fail ??
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))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果“失败”意味着您的“左外连接”似乎不起作用,您可以尝试此查询。
我将对
VariationTypeID
的检查移至 join 子句。将它们放在 where 子句中会使外连接的行为类似于内连接。If by fail you mean that your
left outer join
does not seem to work you could try this query instead.I moved the checks on
VariationTypeID
to the join clause instead. Having them in the where clause makes your outer join's behave like inner joins.