基于4个关系的SQL查询需求:查找与导师住址一致的学生
解决思路与完整SQL查询
嘿,我来帮你搞定这个查询!你的需求是找出所有和自己导师住在同一条街道、同一城市的学生(毕竟导师和 mentees 都是学生),咱们一步步理清楚:
首先,你的原始思路里用子查询的方向没问题,但有个明显的逻辑错误——你用street IN (SELECT sid ...),这是把街道字符串和学生ID做匹配,类型和逻辑都不对哦。咱们换更清晰的关联方式来写:
推荐用JOIN的写法(可读性更高)
SELECT s_mentee.sid AS mentee_id FROM Student s_mentee JOIN Mentorship m ON s_mentee.sid = m.mentee_id JOIN Student s_mentor ON m.mentor_id = s_mentor.sid WHERE s_mentee.street = s_mentor.street AND s_mentee.city = s_mentor.city;
代码解释:
- 给
Student表起了两个别名:s_mentee代表被指导的学生,s_mentor代表对应的导师 - 通过
Mentorship表把mentee和导师的ID关联起来 - 最后用
WHERE条件筛选出街道和城市完全一致的记录
如果想用子查询的方式实现
要是你更倾向于子查询的写法,可以这么调整:
SELECT sid FROM Student WHERE (street, city) IN ( SELECT s_mentor.street, s_mentor.city FROM Mentorship m JOIN Student s_mentor ON m.mentor_id = s_mentor.sid WHERE m.mentee_id = Student.sid );
这个逻辑是:对每个学生,检查他的(街道,城市)组合是否和自己导师的(街道,城市)组合匹配。
小提醒
一般来说,JOIN的写法比子查询更高效,尤其是当数据量较大的时候,而且可读性也更强,后续维护起来更方便。
内容的提问来源于stack exchange,提问作者user6792790
相关产品推荐
相关产品推荐

