【发布时间】:2019-08-15 10:54:43
【问题描述】:
我正在使用 Express.js 在 Node.js 中编写后端 API。
在其中一个 API 中,我需要返回给定教师列表共有的学生列表。
例如,如果
- Teacher1 教 Tom、Jerry 和 Ed。
- Teacher2 教 Ed、Eddy 和 Jerry。
- Teacher3 教 Ed、Edd 和 Eddy。
API 接受教师列表[Teacher1, Teacher2, Teacher3] 的输入。那么输出应该是[Ed],因为它是三位老师之间唯一的共同学生。
这是定义教师和学生之间关联的寄存器表。
id | teacher_email | student_email | valid |
41 | Tom@gmail.com | May@gmail.com | 1 |
42 | Tom@gmail.com | jerry@gmail.com | 1 |
43 | Tom@gmail.com | Kestov@gmail.com | 1 |
44 | Toni@gmail.com | hdjh@kd.com | 1 |
58 | larry@gmail.com | jerry@gmail.com | 1 |
59 | gerrad@gmail.com | jerry@gmail.com | 1 |
60 | gerrad@gmail.com | Kestov@gmail.com | 1 |
61 | gerrad@gmail.com | Katrin@gmail.com | 1 |
62 | gerrad@gmail.com | Piniyara@gniail.com | 1 |
63 | gerrad@gmail.com | Ritz@gmail.com | 1 |
64 | gerrad@gmail.com | Taz@gmail.com | 1 |
65 | gerrad@gmail.com | Fensuk@gmail.com | 1 |
66 | gerrad@gmail.com | Joe@gmail.com | 1 |
67 | gerrad@gmail.com | Mustafa@gmail.com | 1 |
69 | Tom@gmail.com | Fensuk@gmail.com | 1 |
70 | Tom@gmail.com | Taz@gmail.com | 1 |
我尝试编写一个自联接查询,但它为输入中的所有教师分配了所有学生。这里是:
const commonStudentsForTeachersQueryString = "SELECT a.student_email "+
"FROM register a, register b "+
"WHERE b.teacher_email=a.teacher_email "+
"AND "+
"a.teacher_email in (?) "+
"AND "+
"a.valid=? "+
"GROUP BY a.student_email";
虽然,可以选择让每个老师的所有学生循环并Intersecting 他们在那里,但这不是最佳选择。我只想使用一个查询来获取教师列表中的普通学生。
Here 是供参考的 GitHub 存储库。
【问题讨论】: