You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:21:03