2013-12-14 4 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 | 

Fiddle 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 
Смежные вопросы