2016-11-07 16 views
0

私はこのクエリで本当に苦労しています。私は2つのテーブルを持っています.1つは "users"、もう1つは "orders"です。 「users」はフィールド「user_id」を有し、「orders」もフィールド「user_id」を有する。SQLクエリ合計レコード

「注文」テーブルに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 
+0

何かを見たいです'おそらく? – Tibrogargan

+0

よく見えます。私はそれを試してみましょう。ありがとう。 – Brasciole

+0

たぶん、Tanjimの答えになるかもしれません - そのうちの1つは、よりパフォーマンスの高いものに縛られています。たぶん彼は – 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によっては、あなたが(注文からOどこo.user_id = u.user_id 'X' を選択)が存在していないユーザUから `SELECT COUNT(*)のように、このWhat's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?

+0

2番目にエイリアスが間違っていると説明します(X.UserID = A.UserIDのはずです)。 Ordersのレコード数が一定数を上回った場合に、最後のDBMSに問題があることはありませんか? – Tibrogargan

+0

@Tibrogargan、あなたは 'Not IN'問題を意味しましたか? – Esty

+1

うん。数ヶ月前に、私が取り組んでいたプロジェクトは、* NOT *句に* X *以上の値を入れようとすることでうまくいったのです。しかし、DBMSに由来していない可能性があります – Tibrogargan