获取SQL中的行或null条目

时间:2016-05-04 21:07:05

标签: mysql

我有四个表,产品,价格计划和两个类别表,如下所示:

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。有什么建议吗?

1 个答案:

答案 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