Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 动态关系的有序性_Sql_Tsql - Fatal编程技术网

Sql 动态关系的有序性

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,不能用于排序。一个产品可能有

我有一张产品表。与产品相关的多对一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,不能用于排序。一个产品可能有任意数量的选项,并且一个产品不需要所有的选项组合。

除非我遗漏了什么,否则您想要的输出似乎与该产品无关。而仅仅是一个带有选项的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)