+------+--------+---------+
| id | teacher|student |
+-------+-------+---------+
| 1 | 1 |1 |
| 2 | 3 |3 |
| 3 | 3 |4 |
| 4 | 3 |5 |
| 5 | 3 |6 |
| 6 | 4 |5 |
| 7 | 4 |6 |
+-------+-------+---------+
这是一个多对多的关联表,我如何查询一个学生列表,他们有共同的老师,例如3和4?
我希望能得到学生5和6,因为他们都“共享”同一个老师?
我现在拥有的是 SELECT ts.studentId, ts.teacherId FROM teacher_students ts group by ts.studentId, ts.teacherId having ts.teacherId in (3,4);
但是我要学生3,4,5,6而不是5,6
3条答案
按热度按时间yyyllmsg1#
使用条件聚合
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=70b3b2de9695f2f567afeaee7ec37bda
2jcobegt2#
下面是一个典型的方法:
演示
上述查询的一个优点是索引友好。一般来说,如果你想让学生有三个或三个以上的普通教师,那么你可以使用:
dxpyg8gm3#
你也可以使用
where
带的子句exists
: