0

我的 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
;

这样做的正确方法是什么?

4

3 回答 3

4
SELECT COUNT(id) FROM user WHERE id NOT IN (SELECT user_id FROM order);

这是简单而有效的;它为您提供了所有id不在user其中的内容order(即从未放置过的内容)。

于 2013-10-01T05:53:26.740 回答
0

您可以NOT EXISTS 用作:

SELECT COUNT(ID) FROM USER
  WHERE NOT EXISTS ( SELECT USER_ID FROM ORDER);
于 2013-10-01T05:58:27.133 回答
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
于 2013-10-01T06:07:25.347 回答