我有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
如何获得没有订单的用户?
答案 0 :(得分: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
答案 1 :(得分: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