2012-03-01 7 views
0

쿼리에서 조인하고 NOT IN() 절을 사용할 수 있습니까? 내가 가진 무엇mySQL JOIN ON NOT()? 가능

내가 "친구" 있는 결과의 사람들을 제외하려고 원인

SELECT DISTINCT loc.*, 
     a.firstname, 
     a.lastname, 
     a.profileimg, 
     (((acos(sin((37.2790669*pi()/180)) * sin((`latitude`*pi()/180))+cos((37.2790669*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((-121.874722 - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM memb_geo_locations loc 
       JOIN memb_baseInfo a ON a.mID = loc.mID 

       JOIN memb_friends c ON (c.mID = loc.mID OR c.friendID = loc.mID) AND (c.mID = 21 OR c.friendID = 21) 
       WHERE loc.primaryAddress = '1' 
       AND loc.mID NOT IN(21) 
       HAVING `distance` < 25 ORDER BY `distance` ASC LIMIT 0, 25 

내가이 줄

JOIN memb_friends c ON (c.mID = loc.mID OR c.friendID = loc.mID) AND (c.mID = 21 OR c.friendID = 21) 

의 (a NOT IN 역할을하는)가 필요하다 memb_friends 테이블에서 열 mID와 friendID는 같은 의미로 사용됩니다. 우정에 대한 요청을 누가 시작했는지에 따라 다릅니다. 그래서 내 ID가 21이라고 말할 수 있습니다. 그 테이블의 friendID 또는 mID가 될 수 있고 다른 사람의 ID가 해당 테이블입니다. 내 목록에 10 명의 친구들이 있고 내 데이터베이스에 1000 명이 있다고 말할 수 있습니다. 그래서 결론은 쿼리가 끝난 후에도 작업 할 990 개의 결과를 가져야합니다. 그러나 Im은이 쿼리를 사용하기 위해 테이블을 조인하는 방법과 거기에서 제외하는 방법 중 하나를 고수했습니다.

답변

1

외부 결합을 수행하고 c.mID가 null 인 행만 선택하는 방법은 어떻습니까?

+0

해당 테이블 mID 또는 friendID는 null이 아니어도 항목이 없을 것입니다. 친구가 아니거나 친구 인 10 명을 나타내는 990 명의 ​​사용자를 가리 킵니다. – chris

+0

아, 롤, 알았어. 네가 지금하고 싶은 말이 뭔지 이해해. 조금만 가지고 놀아 본 후에도, 나는 아직도 옳은 결과를 얻을 수 없다. 왜냐하면 Im은 DISTINCT – chris

+0

에도 불구하고 2/10 또는 여러 개의 복제본을 얻었습니다. 그 비트가 헤엄 쳐서 도왔다. 고마워. – chris