Mysql左连接问题,3个表没有从第一个表返回所有行

时间:2015-12-10 07:12:28

标签: php mysql sql

我有以下查询

select  catid, cat_name, currency, count(is_reporting_category_sales.id) as total_sales, 
sum(total_sales) as total_earning 
from is_category 
  left join is_reporting_category_sales on is_category.catid = is_reporting_category_sales.category_id 
  join is_reporting_order on is_reporting_order.id = is_reporting_category_sales.order_id 
group by catid, cat_name, currency 
ORDER BY `is_category`.`cat_name` ASC

但这只返回is_category和is_reporting_category_salesis_reporting_order中常见的行,但我想从is_category table获取所有行。如果该类别没有订单,则0total_earningtotal_sales

2 个答案:

答案 0 :(得分:1)

您必须使用左连接

left join is_reporting_order on is_reporting_order.id = is_reporting_category_sales.order_id 

而不是

join is_reporting_order on is_reporting_order.id = is_reporting_category_sales.order_id 

答案 1 :(得分:0)

也许使用左外连接可能会得到你期望的结果(不得不猜测btw列的一些别名,所以其中一些可能是错误的)

select  c.`catid`, c.`cat_name`, `currency`, count(i.`id`) as 'total_sales', sum(`total_sales`) as 'total_earning' 
from `is_category` c
  left outer join `is_reporting_category_sales` i on c.`catid` = i.`category_id`
  left outer join `is_reporting_order` on o.`id` = i.`order_id`
group by c.`catid`, c.`cat_name`, `currency`
order by c.`cat_name` asc;