2012-09-20 35 views
0

我已經瀏覽了本網站上的一些其他帖子,並沒有看到什麼即時通訊尋找所以在這裏。MySQL左數第二表

可以說我有2個表

juser 
----------------------------- 
userID firstName lastName 
----------------------------- 
1   billy  bob 
2   jezze  belle 
3   bobbie  sue 

和:

juserrel 
--------------------------------------------- 
id  userID  relUserID  state 
--------------------------------------------- 
1   1   2   approved 
2   2   1   retired 
3   2   1   approved 
4   3   2   approved 

我所試圖做的就是一個結果集,顯示了有關與juser表中的每個用戶的每個用戶信息和將一個名爲連接的列添加到結果集中,該列顯示特定用戶與另一個用戶有多少「活動」連接。

上面的結果,我基於表想到的是

resultSet 
----------------------------------------------- 
userID firstName lastName connections 
----------------------------------------------- 
    1   billy  bob   2 
    2   jezze  belle   3 
    3   bobbie  sue   1 

我嘗試的查詢如下

select userID, firstName, lastName , coalesce(x.cnt,0) as connections 
from juser 
left outer join (select count(*) cnt from juserrel where juserrel.userID = 
userID or juserrel.relatedUserID = userID and juserrel.state = 'approved') 
x on userID = userID 

的結果集,我得到這個樣子的:

resultSet 
----------------------------------------------- 
userID firstName lastName connections 
----------------------------------------------- 
    1   billy  bob   4 
    2   jezze  belle   4 
    3   bobbie  sue   4 

幫忙請;)

+0

是我編輯的..遺憾的混亂 – Deslyxia

回答

3

嘗試:

select u.userID, u.firstName, u.lastName, 
    count(case when ur.state = 'approved' then 1 end) 
from juser u 
inner join juserrel ur on u.userID = ur.userID or u.userID = ur.relUserID 
group by u.userID, u.firstName, u.lastName 

SQL Fiddle Example

+0

這將計算該用戶#2(Jezze百麗)有三個活動連接,但OP指定她只有兩個(可能是因爲兩個關係都是用戶#1,每個方向都有一個)。我想你需要在那裏使用'DISTINCT'或'UNION'。 – ruakh

+0

@ruakh我認爲你是對的,這是不清楚的問題。 – RedFilter

+0

ohh我的錯 - 是的用戶2應該有3個活動連接 – Deslyxia