2013-12-14 80 views
0

我已經搜索並瀏覽了類似於我的可用主題。但是,未能發現滿足我的要求。因此,在這裏發佈。複雜的MySQL查詢多對多

我有四個表如下:

"Organization" table: 
-------------------------------- 
| org_id  | org_name  | 
| 1   | A    | 
| 2   | B    | 
| 3   | C    | 

"Members" table: 
---------------------------------------------- 
| mem_id  | mem_name  | org_id  | 
| 1   | mem1   | 1   | 
| 2   | mem2   | 1   | 
| 3   | mem3   | 2   | 
| 4   | mem4   | 3   | 

"Resource" table: 
-------------------------------- 
| res_id  | res_name  | 
| 1   | resource1  | 
| 2   | resource2  | 
| 3   | resource3  | 
| 4   | resource4  | 

"member-resource" table: 
-------------------------------------------- 
| sl_no  | mem_id  | res_id  | 
| 1   | 1   | 1   | 
| 2   | 1   | 2   | 
| 3   | 2   | 1   | 
| 4   | 4   | 3   | 
| 5   | 3   | 4   | 
| 6   | 2   | 3   | 
| 7   | 4   | 3   | 

我想找出根據組織的不同資源的總數。預期輸出如下:

| org_name  | Total Resources  | 
| A    | 3     | 
| B    | 1     | 
| C    | 1     | 

我也想根據組織找出共享資源的總數。預期產出如下:

| org_name  | Shared Resources  | 
| A    | 1     | 
| B    | 0     | 
| C    | 1     | 

任何有關這方面的幫助將高度讚賞。

問候。

回答

0

它比你想象的要簡單得多,特別是因爲你甚至都不需要resource表:

SELECT o.org_name, COUNT(DISTINCT mr.res_id) TotalResources 
FROM member_resource mr 
JOIN members m ON mr.mem_id = m.mem_id 
JOIN organization o ON m.org_id = o.org_id 
GROUP BY o.org_id 

輸出:

| ORG_NAME | TOTALRESOURCES | 
|----------|----------------| 
|  A |    3 | 
|  B |    1 | 
|  C |    1 | 

小提琴here

+1

感謝您的快速回復兄弟。它工作完美。 – mbk

+0

我想要另一個幫助兄弟。我如何根據與其他組織共享的組織找到總資源。預期輸出爲:A> 1,B> 0,C> 1 – mbk

0

嘗試以下查詢。

SELECT org_name, COUNT(DISTINCT res_id) 
FROM organization, members, member-resource 
WHERE members.mem_id = member-resource.mem_id 
AND organization.org_id = members.org_id 
GROUP BY org_id, org_name