在MySQL中加入两个具有特定条件的表

时间:2019-05-22 14:42:56

标签: mysql sql join

我有两个桌子

表1:(用户)ID,名称,用户名,密码

表2:(订单)ID,用户,状态

状态 具有两个值:1(取消订单) 2(成功订单)

我想显示所有用户列表,并将订单数计为 orders (仅成功订单的订单数)

我写这个sql:

  select `user`.* , count(`sale`.`user`) as 'orders'
  from `user` 
  left join `sale`
      on `sale`.`user` = `user`.`id`
  where `user`.`type` = 'customer'
    and (`sale`.`status` IS NULL OR `sale`.`status` = 2)
  group by `user`.`id`
  order by `user`.`id` DESC 

在此查询中,如果结果中没有显示用户没有任何订单或有成功订单

但如果用户取消的订单未显示在结果中

我要在结果中显示所有用户和订单列

如果订单状态为2,则订单列显示成功订单的数量

如果订单状态为1或为空(用户没有任何订单),则结果的订单栏中显示为0计数

预先感谢

1 个答案:

答案 0 :(得分:2)

status上的条件移至on子句:

  select u.* , count(s.user) as orders
  from `user` u left join
       sale s
        on s.`user` = u.id AND s.status = 2
  where u.`type` = 'customer'
  group by u.id  -- ok, assuming id is unique
  order by u.id  DESC