2014-05-11 1 views
1

나는 두 개의 테이블이있다.다른 사용자, 우정과 선택

친구가 3 명 미만인 모든 사용자를 선택하려고 할 때 friendship 테이블에 해당 친구의 기록이 없기 때문에 친구가없는 사용자를 제외하고는 쉽게 알 수 있습니다.

내 쿼리는 순간 다음과 같습니다

SELECT u.email, COUNT(u.email) 
FROM user u 
    INNER JOIN friendship f ON f.user1_email = u.email OR f.user2_email = u.email 
GROUP BY u.email 
HAVING COUNT(u.email) < 3; 

가 어떻게이 반사회적 사람들의 결과를 추가 할 수 있습니다 : P는?

답변

2

UNION을 사용하여 원하는 것을 빠르게 얻을 수 있습니다.

SELECT u.email, COUNT(u.email) 
FROM user u 
INNER JOIN friendship f ON f.user1_email = u.email OR f.user2_email = u.email 
GROUP BY u.email 
HAVING COUNT(u.email) < 3 
UNION 
SELECT u.email, 0 
FROM user u 
WHERE u.email not in (SELECT user1_email from friendship) 
AND u.email not in (SELECT user2_email from friendship); 
+0

예 예쁘고 빠르게 작동하지만 0부터 3 친구 또는 1에서 7과 같이 태어난 사람을 동적으로 설정하려고한다고 가정 해 봅시다. 확인할 사실 때문에 작동하지 않습니다. 0 친구가 하드 코드 된 것 같습니다 – lpostula

+0

귀하의 질문에 분명히 0-3 명의 친구가 몇 명 있는지 알고 싶다고 말합니다. 귀하의 질문은 임의의 수의 친구를 쿼리 할 수있는 것에 대해서는 언급하지 않았습니다. 다른 질문이 있으면 게시하는 것이 좋습니다. –