我的 MySQL 数据库中有一个 User 表和一个 Order 表。一个用户可以有多个订单。
我正在尝试查找从未下过订单的用户数量,并尝试了以下变体:
// Incorrect query
SELECT count(u.id)
FROM user AS u
WHERE count(u.o) = 0
LEFT OUTER JOIN order AS o
ON o.user_id = u.id
;
这样做的正确方法是什么?
我的 MySQL 数据库中有一个 User 表和一个 Order 表。一个用户可以有多个订单。
我正在尝试查找从未下过订单的用户数量,并尝试了以下变体:
// Incorrect query
SELECT count(u.id)
FROM user AS u
WHERE count(u.o) = 0
LEFT OUTER JOIN order AS o
ON o.user_id = u.id
;
这样做的正确方法是什么?
SELECT COUNT(id) FROM user WHERE id NOT IN (SELECT user_id FROM order);
这是简单而有效的;它为您提供了所有id
不在user
其中的内容order
(即从未放置过的内容)。
您可以NOT EXISTS
用作:
SELECT COUNT(ID) FROM USER
WHERE NOT EXISTS ( SELECT USER_ID FROM ORDER);
您可以使用以下方法执行此操作left join
:
SELECT count(u.id)
FROM user AS u
LEFT OUTER JOIN order AS o
ON o.user_id = u.id
WHERE o.user_id IS NOT NULL