首页 > 解决方案 > 在mysql中加入两个具有特定条件的表

问题描述

我有两张桌子

表 1: (用户) id,name,username,password

表 2:(订单)id、用户、状态

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

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

我写这个 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 或 null(用户没有任何订单)在结果的订单列中显示 0 计数

提前致谢

标签: mysqlsqljoin

解决方案


将条件移至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 

推荐阅读