0

我有 2 个表用户和订单,我想获取用户和他的订单计数

SELECT `users`.*, `orders`.*,count(*) FROM `users` LEFT JOIN orders ON  
`users`.`id` = `orders`.`user_id` 
UNION SELECT `users`.*, `orders`.*,count(*) FROM users 
RIGHT JOIN orders ON `users`.`id` = `orders`.`user_id`

此查询选择有订单的用户和订单数量,但不选择没有订单的用户。

我想要得到的

user orders
John   5
Thomas 0
Mike   8

我得到了什么

user orders
John   5
Mike   8

如何获得没有订单的用户?

4

2 回答 2

3

为此,您不需要完整的外部联接。orders假设表中的所有用户都对表具有有效引用,左外连接应该没问题users

SELECT u.*, count(o.user_id)
FROM `users` u LEFT JOIN
      orders o
      ON u.`id` = o.`user_id` 
group by u.id
于 2013-08-21T19:30:56.030 回答
2

以下查询将为您提供所有用户的列表及其订单数,如果该用户没有订单,则为 0。

另外,您确定 ORDER_ID 是用户表的 FK 吗?这对我来说似乎违反直觉......

SELECT U.NAME
        ,COUNT(O.ORDER_ID)
FROM    USERS U
LEFT OUTER JOIN
        ORDERS O
ON      U.ID = O.ORDER_ID
GROUP BY
        U.NAME
于 2013-08-21T19:31:40.320 回答