テーブル製品があり、各製品にはカテゴリとプロパティの動的リストがあります(これらのプロパティは別のテーブルにあります):
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
結果の1行ではなく、このクエリの後、「121」の結果が得られます。何が間違っているのかわかりません。私は次のような結果を得たい:
| Product name | Manufacturer | Category | prop1 | prop2 | prop3| Prop4 |
| some product name | RedBull | Can | 34 | something | 45.6 | something else |
私は何が間違っているのですか、それともこれは不可能ですか?
私が理解しているように、ここでいくつかのクロス結合を取得します。