2016-11-07 2 views
0

정말이 쿼리에 어려움을 겪고 있습니다. 나는 2 개의 테이블을 가지고 있는데, 하나는 "users"이고 다른 하나는 "orders"이다. "users"에는 "user_id"필드가 있고 "orders"에는 "user_id"필드가 있습니다.SQL 쿼리 총 레코드

"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 
+0

뭔가보고 싶어 (오 주문에서 'X'를 선택 어디 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에 따라이 u는 존재하지 사용자의 SELECT COUNT (*)`등이 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, 'Not IN'문제가 있었습니까? – Esty

+1

예. 몇 달 전에 내가 작업하고 있던 프로젝트가'NOT IN' 절에 * X * 이상의 값을 넣으려고 시도해 버렸습니다. 그래도 DBMS에서 줄기가 없었을 수도 있습니다. – Tibrogargan