从2个表格和1个条件中选择值

时间:2019-05-09 02:04:13

标签: sql

我有3张桌子:专业人员,专业和会议。每个专业人员都有专长并且进行了一定数量的培训。

假设...

professionals           
| id | name |        
...........         
| 1  | John |        
| 2  | Bart |        
| 3  | James|        


speciality                  
| id |profId|desc |       
..................       
| 1  |   1  |neurology|   
| 2  |   1  |nutrition|   
| 3  |   2  |kine     |   


session
| id |idProf|
........... 
| 1  |   1  | 
| 2  |   2  |  
| 3  |   3  |   

根据表格,专业人员1,约翰,具有2个专业,并且进行了1次会议,专业人员2,巴特,具有1个专业,并且进行了1次会议,詹姆斯,专业人员3,具有0个规范,但是进行了1次会议。

我需要做的是显示参加会议的专业人员的姓名和ID,例如,拥有1个以上专业,因此必须选择 1,约翰

我正在使用sql。

我可以从进行会话的那些人中选择数据

SELECT pro.id, pro.name FROM professionals pro 
INNER JOIN session ssn
ON pro.id = ssn.idProf

我可以从大于X的专业中选择值

SELECT COUNT(speciality.profId) Q
FROM speciality
GROUP BY id
HAVING COUNT(speciality.profId) > 1;

但是我不能在同一个查询中都做

我希望这是最清晰的

编辑

在这种情况下,我的预期输出...

| id | name | sessions Q|
........................
| 1  | John |     2     |

2 个答案:

答案 0 :(得分:0)

使用JOIN和IN:

SELECT P.name, spec_count.Q
FROM professionals P
JOIN (
    SELECT profId, COUNT(profId) Q
    FROM speciality        
    GROUP BY profId
    HAVING COUNT(profId) > 1
) spec_count
ON P.id = spec_count.profId
WHERE P.id IN (SELECT idProf FROM session)

实时测试:http://sqlfiddle.com/#!17/5ba37/2

输出:

| name | q |
|------|---|
| John | 2 |

答案 1 :(得分:0)

这使您可以在以后包含任何子查询结果。

SELECT pro.id, pro.name, Spec.SpecCount 
FROM professionals pro 
JOIN (SELECT profId
      FROM session
      GROUP BY profId) AS Session
ON pro.id = Session.ProfId
JOIN (SELECT profId, COUNT(1) AS SpecCount
      FROM speciality
      GROUP BY profId
      HAVING COUNT(1) > 1) AS Spec
ON pro.id = Spec.profId