我有以下查询
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_sales
,is_reporting_order
中常见的行,但我想从is_category table
获取所有行。如果该类别没有订单,则0
为total_earning
和total_sales
。
答案 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;