我有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 |
答案 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