通过查询实现此排除矩阵的最佳方法是什么?
表中有固定数量的产品,并且想法是产品是否出售给客户(由行表示),其他产品(列)可能会或可能不会根据下面的规则矩阵出售。目的是获得允许销售任何特定销售产品代码的产品代码。
ProductCode|MRLSPN|MRLSPPN|MRLSDF|MRLSPDF|LGS|LGP|HOBN|HODF|HVO|HVOF
MRLSPN |No |No |No |No |No |Yes|No |No |No |No
MRLSPPN |No |No |No |No |No |No |No |No |No |No
MRLSDF |No |No |No |No |No |Yes|No |No |No |No
MRLSPDF |No |No |No |No |No |No |No |No |No |No
LGS |No |No |No |No |No |Yes|No |No |No |No
LGP |Yes |No |Yes |No |No |No |No |No |No |No
HOBN |No |No |No |No |Yes|Yes|No |No |No |No
HODF |No |No |No |No |Yes|Yes|No |No |No |No
HVO |Yes |Yes |Yes |Yes |Yes|Yes|Yes |Yes |No |No
HVOF |Yes |Yes |Yes |Yes |Yes|Yes|Yes |Yes |No |No
按行排列。
答案 0 :(得分:2)
您可以将格式从矩阵更改为关联表,例如
表其他产品: SoldProductCode AdditionalProductCode
所以你的表看起来像
SoldProdCode, Additional ProdCode
MRLSPN, LGP
MRLSDF, LGP
现在您只需运行查询即可
SELECT AdditionalProductCode
FROM AdditionalProducts
WHERE SoldProductcode='MRLSPN'
修改强>
这种方法的另一个好处是,如果您购买MRLSPN可获得特别折扣,您可以获得10%的LGP,如果您购买MRLSDF,您可能会获得15美元的折扣。使用此模型,您可以扩展关联表以包含其他属性。这可能适用于您的模型,也可能不适用。
答案 1 :(得分:0)
如果可以保证不超过32列,则可以使用int(32位)作为位标志字段来实现。但是,多对多的关系将更加灵活。
创建多对多映射表ProductCode2ProductCodeMapping
CREATE TABLE ProductCode2ProductCodeMapping
(
ProductCodeId int,
AllowedProductCodeId int
)
使用这两列的复合主键。
然后为每个产品和相关产品插入一行。
然后只需查询:
SELECT AllowedProductCodeId
FROM ProductCode2ProductCodeMapping
WHERE ProductCodeId = @myProductCodeId
如果您没有产品的整数ID,您可以添加它们或使用char productCode代替(我更喜欢前者)
答案 2 :(得分:0)
这是一个多对多链接表:
Sold CanBeSold ---- --------- MRLSPN LGP MRLSDF LGP …
和查询:
SELECT CanBeSold
FROM matrix
WHERE Sold = @Product