2009-06-23 78 views
2

通過查詢來實現排除矩陣的最佳方式是什麼?通過查詢實現排除矩陣的最佳方法

表中有固定數量的產品,想法是如果產品銷售給客戶(以行表示),其他產品(列)可能或不可能基於下面的規則矩陣出售。目標是獲得允許出售任何給定的銷售產品代碼的產品代碼。

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 

按行排列。

回答

2

能你從矩陣更改格式的關聯表像

表AdditionalProducts: SoldProductCode AdditionalProductCode

所以,你的表看起來像

SoldProdCode, Additional ProdCode 
MRLSPN, LGP 
MRLSDF, LGP 

現在,你可以簡單地運行一個查詢說

SELECT AdditionalProductCode 
FROM AdditionalProducts 
WHERE SoldProductcode='MRLSPN' 

編輯

這種方法的另一個好處是,如果你給什麼特別的如果您購買MRLSPN,可享受10%折扣的LGP折扣,如果您購買MRLSDF,則可能會獲得15美元折扣。藉助此模型,您可以擴展關聯表以包含其他屬性。這可能適用於您的模型,也可能不適用。

+0

添加複合主鍵到該表,或至少一個唯一的密鑰 – 2009-06-23 15:04:10

0

如果可以保證不超過32列,則可以使用int(32位)作爲位標誌字段來實現。但是多對多的關係會更加靈活。

創建許多一對多映射表,ProductCode2ProductCodeMapping

CREATE TABLE ProductCode2ProductCodeMapping 
(
    ProductCodeId int, 
    AllowedProductCodeId int 
) 

隨着同時使用這些列的複合主鍵。

然後爲每個產品和相關產品插入一行。

然後簡單地詢問:

SELECT AllowedProductCodeId 
FROM ProductCode2ProductCodeMapping 
WHERE ProductCodeId = @myProductCodeId 

如果沒有整數標識的產品,你可以將它們添加或使用CHAR PRODUCTCODE而不是(我寧願是前者)

0

這是一個許多一對多連接表:

 
Sold CanBeSold 
---- --------- 
MRLSPN LGP 
MRLSDF LGP 
… 

,並查詢:

SELECT CanBeSold 
FROM matrix 
WHERE Sold = @Product