在MySQL表中选择具有特定值或默认值的行

时间:2019-01-29 03:01:18

标签: mysql select

我是新来的,如果这是一个愚蠢的问题,对不起。我需要有关mysql查询的帮助。

我们为客户提供各种服务。我们的服务和价格在这样的表格中

service    | customer    | price
  1        |     0       | 1.1 
  2        |     0       | 2.1 
  3        |     0       | 1.3
  2        |     1       | 1.9 
  3        |     2       | 1.2 

如果客户= 0,则为默认价格。如果客户> 0,则该价格是该服务的客户特定价格。

我们需要向个人客户显示所有服务的价格。因此,我们需要进行查询,以便在出现客户特定价格的情况下,显示其他默认价格。

因此对于客户1,它应该显示

service    | customer    | price
  1        |     0       | 1.1 
  2        |     1       | 1.9 
  3        |     0       | 1.3

对于客户2,应显示

service    | customer    | price
  1        |     0       | 1.1 
  2        |     0       | 2.1 
  3        |     2       | 1.2 

对于其他任何客户,

service    | customer    | price
  1        |     0       | 1.1 
  2        |     0       | 2.1 
  3        |     0       | 1.3

我尝试过

select service, customer, price from services where (customer=1 or customer = 0) order by customer desc

但不会产生所需的输出

1 个答案:

答案 0 :(得分:0)

您可以使用{{1}上的JOIN用客户1(或您想要的任何客户)的值对客户0的价格进行自身LEFT JOIN来获得所需的结果}},并用客户0的价格替换任何service值:

NULL

输出(对于SELECT s0.service, COALESCE(s.price, s0.price) AS price FROM (SELECT service, price FROM services WHERE customer = 0) s0 LEFT JOIN services s ON s.service = s0.service AND s.customer = 1 ORDER BY service ):

customer = 1

Demo on dbfiddle(还显示service price 1 1.10 2 1.90 3 1.30 customer = 2的结果)