SQL查询总记录

时间:2016-11-07 02:59:59

标签: sql

我真的在努力解决这个问题。我有2个表,一个用于“用户”,一个用于“订单”。 “users”具有字段“user_id”,“orders”也具有字段“user_id”。

我需要知道“orders”表中有0条记录的用户的总记录。换句话说,如果我在“用户”表中注册了1000个用户,那么有多少用户从未在网站上下过订单。

我试图用这样的东西来,但当然这是不正确的:

SELECT Count(u.user_id) as tRecs, o.orderid
FROM users u
    INNER JOIN orders o ON u.user_id = o.user_id

1 个答案:

答案 0 :(得分:3)

您可以使用Left Join

SELECT COUNT(A.UserID) FROM Users A LEFT JOIN Orders B ON A.UserID = B.UserID WHERE B.UserID IS NULL

Not Exists

SELECT COUNT(A.USERID) FROM Users A WHERE NOT EXISTS (SELECT UserID FROM Orders X WHERE X.UserID = A.UserID)

Not In

SELECT COUNT(A.USERID) FROM Users A WHERE A.UserID NOT IN (SELECT UserID FROM Orders)

根据您的DBMS的性能,您希望看到此What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?