如何使用AND条件从同一表中选择多个值

时间:2018-09-21 18:42:41

标签: mysql sql

假设以下 professor_school 表:

professorid, schoolid
1,1
2,1
3,1
4,1
1,2
2,2
5,2
1,3
5,3
...

如果可能,我如何使用单个查询来选择与任意数量的学校相关的每位教授?

我的输入参数将是一个未知大小的数组,上面有学校ID的列表,我需要所有这些ID中的所有教授ID。

示例:

input 1 - output 1,2,3,4
input 1,2 - output 1,2
input 1,2,3 - output 1
input 2,3  - output 1,5

我认为我无法进行内部自连接,因为输入参数的数量可能是可变的,我目前的解决方案是按和进行分组,所以

select count(*) as c, professorid from professor_school where schoolid in (1,2,3) group by (professorid) having c=3;

问题是,这是唯一/最佳解决方案吗?有没有更有效的选择?

PS:我意识到问题的标题并不好,但是我想不出更好的表达方式。

1 个答案:

答案 0 :(得分:0)

不,这不是唯一的解决方案。如果您使用MariaDB,则可以使用INTERSECT

SELECT profesorid FROM professor_school WHERE schoolid = 1
INTERSECT
SELECT profesorid FROM professor_school WHERE schoolid = 2
INTERSECT 
SELECT profesorid FROM professor_school WHERE schoolid = 3

在您的示例中,如果您对列(profesorid / schoolid)没有DISTINCT约束,我还将添加UNIQUE

select count(distinct schoolid) as c, professorid 
from professor_school 
where schoolid in (1,2,3) 
group by (professorid) 
having c=3;

或者:

select professorid 
from professor_school 
where schoolid in (1,2,3) 
group by (professorid) 
having count(distinct schoolid)=3;