我有一张产品表。与产品有多对一的sku表。一个选项表,通过关系表与产品有多对一关系,通过关系表有多对一到sku。选项类型表,具有一对多选项。示例模式
EX
Product
ID Name
1 dress
ProductOptionRelation
productID optionID displayOrder
1 1 1
1 2 1
Option
ID Type Name
1 1 Red
2 1 Blue
3 2 0
4 2 2
5 2 4
OptionType
ID name displayOrder
1 color 1
2 size 2
Sku
ID productID
1 1
2 1
3 1
4 1
5 1
SkuOptionRelation
skuID OptionID
1 1
1 3
2 1
2 4
3 1
3 5
4 2
4 3
5 2
5 5
如何将所有这些加入,所以我的输出就像
skuID option
1 red
1 0
2 red
2 2
3 red
3 4
4 blue
4 0
5 blue
5 4
假设所有ID实际上都是uuids并且不能用于排序。除了产品可能有任意数量的选项以外,并非所有产品的选项组合都需要存在。
答案 0 :(得分:1)
SELECT s.skuID, o.Name
FROM SkuOptionRelation s
INNER JOIN [Option] o ON o.ID = s.OptionID
INNER JOIN OptionType ot ON ot.ID = o.Type
order by s.skuid, ot.DisplayOrder
结果:
skuID Name
----------- ----------------
1 Red
1 0
2 Red
2 2
3 Red
3 4
4 Blue
4 0
5 Blue
5 4
(10 row(s) affected)
答案 1 :(得分:0)
除非我遗漏了某些内容,否则您所希望的输出似乎与产品无关。而且只是一个带有选项的sku,这将是......
select so.skuID, o.name
from SkuOptionRelation so
join Option o on so.OptionID = o.ID
如果排序是问题,它来自产品表,那就是......
select so.skuID, o.name
from SkuOptionRelation so
join Option o on so.OptionID = o.ID
join sku s on so.skuID = s.ID
join ProductOptionRelation po on po.productID = s.productID and so.optionID = po.optionID
order by s.ID, po.displayOrder
刚看到另一个答案表明类型顺序也很重要。所以我们现在......
select so.skuID, o.name
from SkuOptionRelation so
join Option o on so.OptionID = o.ID
join OptionType ot on o.type = ot.ID
join sku s on so.skuID = s.ID
join ProductOptionRelation po on po.productID = s.productID and so.optionID = po.optionID
order by s.ID, ot.displayOrder, po.displayOrder