2013-02-08 65 views
0

我有兩個表:加入SQL表

RecommendedFriends和AddedFriends

每個表中有一個用戶字段和朋友現場。我想弄清楚我怎麼能看到有多少朋友加入了他們也被推薦。繼承人的表的例子:

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

在表格RecommendedFriends表中,推薦使用USER FRIENDS? – digitalfrenchfry 2013-02-08 15:15:02

回答

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 2013-02-08 15:17:03

+0

@PinnyM之後添加的內容。 。 。謝謝。我解決了這個問題。 – 2013-02-08 15:17:36