我有四个表,产品,价格计划和两个类别表,如下所示:
products
---------
product_id
a
b
priceplans
---------
priceplan_id
a
b
product_id (can be null)
price
categoryA
---------
a (id)
category_name
categoryB
---------
b (id)
category_name
在价格计划中,a和b是其他表中的类别ID,组合(a,b,product_id)
是唯一的,但product_id也可以为null,然后priceplan应使用(a,b,null)
组合的一般价格计划。这就是理论,但它并没有像我希望的那样好,而且我没有设法构建一个只过滤它们的查询。
示例:
products - 3 products, 2 in the same category, one in another category
product_id a b
1 1 1
2 1 1
3 1 2
priceplans - 3 plans,
1 is for the default (a,b)=(1,1) category combination when there is no product_id,
2 is supposed to override the default as we have declared a product_id, and
3 is the default for (a,b)=(1,2) combination
priceplan_id a b product_id price
1 1 1 null 10
2 1 1 2 15
3 1 2 null 12
当我加入价格计划的产品时,我希望结果如下:
product_id a b priceplan_id price
1 1 1 1 10
2 1 1 2 15
3 1 2 3 12
如果对于具有类别组合(a,b)=(1,1)和id = 1的产品,我希望价格计划与组合(a,b,1)(如果存在),如果不是我想要(a) ,b,null)priceplan。有什么建议吗?
答案 0 :(得分:0)
我终于设法创建了我正在寻找的查询:
select pro.*, pp.* from products pro
left join price_plans pp
on pro.a=pp.a
and pro.b=pp.b
and (pro.product_id=pp.product_id or pp.product_id is null)
left join price_plans pp2
on pro.a=pp2.a
and pro.b=pp2.b
and pp2.product_id =pro.product_id
where pp.product_id <=> pp2.product_id