2016-11-07 129 views
0

我真的很困擾這個查詢。我有兩張桌子,一張是「用戶」,一張是「訂單」。 「用戶」具有「user_id」字段,「orders」也具有「user_id」字段。SQL查詢記錄總數

我需要知道「訂單」表中有0條記錄的用戶的總記錄。換句話說,如果我在「users」表中註冊了1000個用戶,那麼有多少人從未在網站上下過訂單。

我試圖來像這樣的東西,但當然這是不正確的:

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

像'SELECT COUNT(*)U其中不存在(從訂單選擇 'X' O,其中o.user_id = u.user_id) 「也許? – Tibrogargan

+0

看起來不錯。讓我玩這個。謝謝。 – Brasciole

+0

也許去Tanjim的答案 - 他們中的一個肯定會更有效率。也許他會解釋 – Tibrogargan

回答

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?

+0

第二個你有別名錯誤(應該是在哪裏X.UserID = A.UserID)。當Orders中的記錄數超過某個數時,不會讓多個DBMS中的最後一個出現問題? – Tibrogargan

+0

@Tibrogargan,你的意思是'不是'問題? – Esty

+1

是的。幾個月前,我正在研究的一個項目試圖在NOT NOT條件中放入超過* X *的值而被絆倒。可能還沒有源於DBMS,儘管 – Tibrogargan