動態屬性我設計了一個小數據庫的想法是,我有一個表的產品和每個產品都有其類別和屬性的動態列表(這些屬性在另一個表):如何處理選擇從數據庫
ProductCategories{ProductCategoryId, Name}
Products{ProductId, Name, ProductCategoryId}
我在這裏綁定某個類別的產品。現在,每一個產品分類是另一桌在那裏我可以爲該類別添加屬性:每個屬性
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 |
什麼我做錯了或這是不可能的?
我在這裏得到了一些交叉連接,據我瞭解。
這是否意味着每個屬性名稱必須有'Prop_'前綴? – 1110 2013-03-02 15:41:53
@ 1110不,我正在創建名稱爲'Prop_'的列,然後在每個列的後面添加行號值,因此如果您有5個屬性,那麼您將有名爲'Prop_1','Prop_2'等的列我用表結構創建了一個[sql小提琴](http://www.sqlfiddle.com/#!3/f5df4),你可以添加一些插入語句對於一些示例數據然後在評論中發佈新創建的模式鏈接?用數據顯示這一點會更容易。 – Taryn 2013-03-02 15:45:06
在動態查詢中,我得到'關鍵字附近的語法不正確'。':'fot this line')t on p.ProductId' – 1110 2013-03-02 15:50:01