2013-03-30 3 views
1

나는 참여와 선택 하위를 시작하기 위해 노력하고있어하지만 난 반환이 좋은 위의 경우에 반환하위 쿼리 및 가입

SELECT * FROM user, follow 
WHERE user.id IN (SELECT follow FROM referent_follow WHERE referent=3) 

에 문제가하지만 난뿐만 아니라 모두 내를 테이블 내가 반환이 좋은 위의 경우

SELECT * FROM user, follow 
WHERE follow.user_id IN (SELECT follow FROM referent_follow WHERE referent=3) 

을하지 않았 음을 수행하지만 또한 내가 덜 심하게 작동

쿼리 싶지 않았다 내 모든 테이블 사용자가 처음이다 하나지만 나는 따르는 내용이있다. 내 결과에도.

+0

샘플 출력을 제공 할 수 있습니까? –

답변

1

귀하의 현재 쿼리 결과는 두 테이블의 직교 곱 : userfollow입니다. 연결된 레코드를 조인하고 필터링하는 조건을 제공해야합니다.

SELECT DISTINCT a.*, b.* 
FROM user a 
     INNER JOIN follow b 
      ON a.ID = b.user_id 
     INNER JOIN referent_follow c 
      ON a.ID = c.follow 
WHERE c.referent = 3 
+0

답변 해 주셔서 감사합니다 더 낫지 않습니다 – Ajouve

+0

안녕하세요. 다행히 도왔다! –

1

FROM A,B가되도록 모든 행마다 행 B
(그래서 totalRows = rowCount(A)*rowCount(B))에 일치하는 A 및 B의 교차 - 조인 의미한다.

작동합니다 (INNER) JOIN 사용 :

SELECT * 
FROM user 
JOIN follow ON user.id = follow.user_id 
    AND user.id IN (SELECT follow FROM referent_follow WHERE referent=3) 

JOIN보다는 IN를 사용하여 조언을 것, 그것은 일반적으로 더 나은 성능을 초래하기 때문에 :

SELECT user.*, follow.* 
FROM user 
JOIN follow ON user.id = follow.user_id 
JOIN referent_follow ON user.id = referent_follow.follow 
WHERE referent=3 

또한 DISTINCT JW 제안으로해야 할 수도 있습니다 .

+0

답변 해 주셔서 감사합니다 – Ajouve