我有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子句。

10-04 15:52