我需要确定我应该在产品列表中为每种产品使用的价目表。用于给定产品的正确价格表由我已知的几个产品参数决定。但是,并非所有参数都适用于所有价格表。以下是3个价格表的“标准”示例:
pricelist_key param value
A size n1
A weight n2
A color n4
B size n5
B weight n6
B color n8
B type n10
C weight n2
C min_size n5
要回答的问题是:“由pricelist_key标识的哪一组标准值,我的产品是否满足”?
我确保每组参数值都是唯一的 - 换句话说,每个价格表都有一组唯一的标准和/或值 - 我无法满足多个价格表的所有条件。我事先知道必须建立所有价格表的完整参数集,但任何给定的价格表都可以使用这些参数的任何子集作为其标准。
在程序上,我会遍历产品,遍历价目表,并循环参数。我错过的第一个参数会让我退到下一个价目表,直到找到符合所有条件的产品的一个价目表。下一步是在确定的价格表中查找日期并获得在那里找到的一个价格。
但我正在处理集合(在此上下文中是“价格表标准集”),我想了解如何将其视为一个自然的SQL问题 - 因为它似乎应该是。我可以自由地重新设计标准的管理方式,这只是我自己画的角落。设计目标是处理可用于定义价格表标准的各种参数。
建议?
答案 0 :(得分:1)
假设我们看到的是一个给定产品的价格表的一部分,你需要找到一个与之前已知的所有标准相匹配的pricelist_key,你可以使用像这样的查询来找到它:
SELECT pricelist_key, count(*) as params_matched FROM pricelist
WHERE product_id = 1
AND
( param = 'weight' AND value = 'n6'
OR param = 'size' AND value = 'n5'
OR param = 'color' AND value = 'n8' )
GROUP BY pricelist_key
HAVING params_matched = 3