我有2张桌子
1-优惠券
2-牵引力
对于每个优惠券,牵引力表中可能会有几行
我想要所有优惠券的清单及其牵引力的数量(在此示例中为无效)
SELECT `coupons`.*, count(tractions_void.id) as void
FROM `coupons`
LEFT JOIN `tractions` AS `tractions_void`
ON `tractions_void`.`coupon_parent` = `coupons`.`id`
AND `tractions_void`.`expired` = 1
WHERE `coupons`.`parent` =0
问题是即使我使用left join,在输出中我也只获得牵引力至少为1的优惠券....基本上,我在查询结果中根本没有获得牵引力为0的优惠券
我想用0作为
tractions_void
... ...我想如果我使用左联接,我不会遇到这个问题吗? 最佳答案
您需要一个group by
子句:
SELECT c.*, count(t.id) as void
FROM coupons c LEFT JOIN
tractions t
ON t.coupon_parent = c.id AND
t.expired = 1
WHERE c.parent = 0
group by c.id;
我还用较短的别名替换了表名,并删除了反引号以使查询更具可读性。
您的原始查询仅返回一行,因为它在
select
子句中具有聚合功能,而没有group by
子句。