我的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
;
这样做的正确方法是什么?
答案 0 :(得分:4)
SELECT COUNT(id) FROM user WHERE id NOT IN (SELECT user_id FROM order);
这很简单有效;它会为id
中的所有user
提供不在order
内的{{1}}(即从未放置过一个)。
答案 1 :(得分:0)
您可以使用NOT EXISTS
为:
SELECT COUNT(ID) FROM USER
WHERE NOT EXISTS ( SELECT USER_ID FROM ORDER);
答案 2 :(得分:0)
您可以使用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