2013-07-06 54 views
0

我有一個命名爲表:SQL連接或子查詢合併總比賽

  • 用戶
  • userAccount
  • userRight

與1對多的關係。

我在找的是一個查詢,它會給我賬戶總數&的權利。

例如:

user: a 
account: 1, 2, 3 
right: a, b, c 

user b 
account: 1, 2 
right: 

user c: 
account: 1 
right: e, f, g, h 

應該返回結果的數量以降序

a 6 
c 5 
b 2 

我是有密切的使用連接和分組排序的,但我最終得到一個:9作爲其獲得3 x 3條記錄。

+0

把你的表模式在這裏。 –

回答

2

嘗試以下一個

SELECT user_name,(SELECT COUNT(*) FROM userRight WHERE user_id=u.user_id) + 
(SELECT COUNT(*) FROM userAccount WHERE user_id=u.user_id) AS total 
FROM user u ORDER BY total DESC 

,如果你想用戶總數到WHERE子句然後

SELECT user_name,(SELECT COUNT(*) FROM userRight WHERE user_id=u.user_id) + 
(SELECT COUNT(*) FROM userAccount WHERE user_id=u.user_id) AS total 
FROM user u WHERE ((SELECT COUNT(*) FROM userRight WHERE user_id=u.user_id) + 
(SELECT COUNT(*) FROM userAccount WHERE user_id=u.user_id))>10 ORDER BY total DESC 
+0

謝謝,這是有效的,我沒有嘗試子選擇,是否有一個非子選擇的方式,或者他們不再被認爲是壞的。 –

+0

另外,通過子選擇方法,我可以如何將該總數放在where子句中。 –

+0

我需要說的是總共> 10但總共似乎不存在的where子句。 –