我设计了一个小数据库,想法是我有一个表 products 并且每个产品都有其类别和动态属性列表(这些属性在另一个表中):
ProductCategories{ProductCategoryId, Name}
Products{ProductId, Name, ProductCategoryId}
我在这里为某个类别绑定产品。现在,每个 ProductCategory 都与另一个表相关,我可以在其中为该类别添加属性:
CategoryProperties{CategoryPropertyId, ProductCategoryId, Name}
每个属性的值都在下表中:
ProductPropertyValues{ProductId, CategoryPropertyId, Value}
问题是当我执行查询时:
select p.Name as ProductName, m.Name as Manufacturer, pc.Name as Category
from products p
left join dbo.Manufacturers m
on p.ManufactureId = m.ManufactureId
left join dbo.ProductCategories pc
on p.ProductCategoryId = pc.ProductCategoryId
这给了我这样的结果:
| some product name | RedBull | Can |
但我想获取该产品类别的所有相关属性,这就是问题所在。当我尝试这个查询时:
select p.Name as ProductName, m.Name as Manufacturer, pc.Name as Category, cp.Name, ppv.Value
from products p
left join dbo.Manufacturers m
on p.ManufactureId = m.ManufactureId
left join dbo.ProductCategories pc
on p.ProductCategoryId = pc.ProductCategoryId
left join dbo.CategoryProperties cp
on pc.ProductCategoryId = cp.ProductCategoryId
left join dbo.ProductPropertyValues ppv
on p.ProductId = ppv.ProductId
在此查询而不是结果中的一行之后,我得到“121”结果。我不知道我做错了什么。我想得到如下结果:
| Product name | Manufacturer | Category | prop1 | prop2 | prop3| Prop4 |
| some product name | RedBull | Can | 34 | something | 45.6 | something else |
我做错了什么或者这是不可能的?
据我了解,我在这里得到了一些交叉加入。