Mysql 从多个表中查找数据

Mysql 从多个表中查找数据,mysql,sql,database,oracle,Mysql,Sql,Database,Oracle,我有以下带有列的表格 Manager(tabel) | manager_id | manager_type | 1 X 2 Y 3 Z Employee(table) | emp_id | emp_name | 1 A 2 B 3 C ManagerEmployee(table) | id | manager_id |

我有以下带有列的表格

 Manager(tabel) 
 | manager_id | manager_type |
   1             X
   2             Y
   3             Z

 Employee(table) 
 | emp_id | emp_name |
   1         A 
   2         B
   3         C

 ManagerEmployee(table)
 | id | manager_id | emp_id |
   1      1           1
   2      1           2
   3      2           3
   4      2           1
   5      2           2

 Workspace(table)
 | id | manager_id | description | Revenue|
   1       1           ......       20 
   2       2           ......       10
   3       1           ......       20
   4       1           ......       10
   5       2           ......       10 
我想计算所有经理的工作区表的总收入。其中管理器的管理器类型为“X”(管理器表)。并且该经理的员工与其他经理一起工作(ManagerEmployee表中提到的关系)


请帮我解决这个问题?

要从工作区获得收入总额,您可以使用join with manager表,这可以通过

select 
m.manager_id,
sum(w.Revenue) 
from Workspace w
join Manager m on(m.manager_id = w.manager_id)
where m.manager_type ='X'
group by m.manager_id;
要了解为多个经理工作的员工,您可以计算和比较计数必须大于1

select distinct m.* 
from  Manager m
join ManagerEmployee me on(m.manager_id = me.manager_id)
group by me.emp_id
having count(distinct  me.manager_id) > 1
现在,对于您的最后一个任务,即经理类型为X且他们的员工也为其他经理工作过的情况下,您可以组合这两个查询以生成所需的结果

select 
m.manager_id,
sum(w.Revenue) 
from Workspace w
join Manager m on(m.manager_id = w.manager_id)
join (
select distinct m.* 
from  Manager m
join ManagerEmployee me on(m.manager_id = me.manager_id)
group by me.emp_id
having count(distinct  me.manager_id) > 1
) mm 
on (m.manager_id = mm.manager_id)
where m.manager_type ='X'
group by m.manager_id;

@谢谢你的回复。事实上,首先我需要让员工(emp_id=1)与经理“x”(经理_id=1)一起工作,这些员工也与其他经理(经理_id=2)一起工作。一旦确定了所有经理(经理id=(1,2)),计算这些经理的总收入。在单个查询中。感谢您的支持。您的解决方案是仅为类型为“X”的经理计算收入总和。我的观点是,总收入还应包括那些拥有普通员工的经理的收入,即经理“X”的收入。(如果存在一名员工,我们将选择该经理,并显示所有与经理“X”相对的收入总和)@AhsanMohyuddin你能就你的上述观点再问一个问题,并提供你新问题的链接吗?我也会尝试回答