2013-02-08 4 views
0

나는 두 개의 테이블이있다. 나는 사용자가 얼마나 많은 친구들을 추천했는지 알 수있는 방법을 알아 내려고 노력 중이다. 테이블의 Heres는 예 : 가입 SQL 테이블

RecommendedFriends 
User Friends  Time 
------------------------------------ 
Jake Eric  8:00am 
Jake John  8:00am 
Jake Jack  8:30am 
Greg John  8:30am 
Greg Tim   9:00am 
Greg Steve  9:30am 
Will Jackson  9:30am 

AddedFriends 
User Friends  Time 
------------------------------------ 
Jake Jack  8:35am 
Greg John  8:35am 
Greg Tim   9:00pm 
Greg Jim   10:30am 
Greg Tina  10:45am 
Greg Bob   10:00am 
Charlie Brian  11:00am 

그래서 내가 같이 할 필요가 테이블

:

Results 
User RecFriends AddFriends 
------------------------------------ 
Jake Eric   
Jake John   
Jake Jack  Jack 
Greg John  John 
Greg Tim   Tim 
Greg Steve  
Greg    Tina 
Will Jackson  
Charlie    Brian 

그래서 내가 들어가서 3 사람들이 추천 된 친구를 추가 말할 수는 4 개 추천 실패 2 명이 추천하지 않은 사람을 추가했습니다.

+0

테이블의 추천 친구 테이블에서 USER 님을 추천했습니다. FRIENDS? – digitalfrenchfry

답변

2

나는 당신이 원하는 것은 full outer join 생각이 계정에 시간을 갖지 않습니다

select coalesce(rf.USER, af.user) as user, rf.friends as RecFriends, af.Friends as AddFriends, 
from RecommendedFriends rf full outer join 
    AddedFriends af 
    on rf.user = af.user and 
     rf.Friends = af.Friends 

. 권장 사항과 추가 사이에 인과 관계를 추론하려는 경우 권장 시간 이후에 추가 시간이 맞는지 확인할 수 있습니다. 당신이 full outer join은 (사람이 "MySQL의"말할 수)를 지원하지 않는 데이터베이스를 사용하는 경우

, 당신이하고 같은 결과를 얻을 수 있습니다 :

select t.user, MAX(case when which = 'rec' then friends end) as RecFriends, 
     MAX(case when which = 'add' then friends end) as AddFriends 
from ((select rf.user, rf.friends, 'rec' as which 
     from RecommendedFriends af.user 
    ) union all 
     (select af.user, af.friends, 'add' as which 
     from AddedFriends af 
    ) 
    ) t 
group by user 

이 버전은 좋은 기능을 가지고 그것을하지 않습니다 복수의 추천이나 추가가있을 경우 중복 기록을 만들어야한다.

+0

은 아마도'af.time> rf.time'을 추가하여 추천 이후에 추가하는 것을 포함합니다. – paul

+0

@PinnyM. . . 고맙습니다. 나는 그 문제를 해결했다. –