Sql 动态关系的有序性
我有一张产品表。与产品相关的多对一sku表。一个选项表,通过关系表与产品进行多对一关联,通过关系表与sku进行多对一关联。选项类型表,具有一对多选项。示例模式 前 我如何将这一切结合在一起,使我的输出如下Sql 动态关系的有序性,sql,tsql,Sql,Tsql,我有一张产品表。与产品相关的多对一sku表。一个选项表,通过关系表与产品进行多对一关联,通过关系表与sku进行多对一关联。选项类型表,具有一对多选项。示例模式 前 我如何将这一切结合在一起,使我的输出如下 skuID option 1 red 1 0 2 red 2 2 3 red 3 4 4 blue 4 0 5 blue 5 4 假设所有ID实际上都是UUID,不能用于排序。一个产品可能有
skuID option
1 red
1 0
2 red
2 2
3 red
3 4
4 blue
4 0
5 blue
5 4
假设所有ID实际上都是UUID,不能用于排序。一个产品可能有任意数量的选项,并且一个产品不需要所有的选项组合。除非我遗漏了什么,否则您想要的输出似乎与该产品无关。而仅仅是一个带有选项的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
结果:
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)
这将无法正确排序。您假设sku ID具有内在值。它是uuid,不能用于排序。@xxxpigeonxxx您的问题不清楚,而且在您的示例中,您使用int作为sku(1,2,3,4,5)。我不明白你想用什么值来排序我指定的“假设所有的ID都是UUID并且不能用于排序”如果我使用像“7C81D22B-503C-4DA0-B4F8-2A9C3B3EC2D2”这样的值,它真的会有什么不同吗?它只会引起人们对长值的注意,而不是模式。
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)