如何通过student表的stu_id关联查询guardian表的监护人信息
问题排查及解决方案
常见不生效原因
- 子查询返回值匹配问题:如果stu_id=1对应的学生记录返回了多个stu_uid,或者没有返回任何值,使用
=匹配会直接报错,建议替换为IN关键字兼容多返回值、空返回的场景 - 字段/表名拼写错误:确认student表存在
stu_id、stu_uid字段,guardian表存在stu_uid、guardian_nm、guardian_age字段,注意大小写敏感的数据库要严格匹配字段名大小写 - 字段类型不匹配:确认student表的
stu_uid字段类型和guardian表的stu_uid字段类型一致,避免数字和字符串隐式转换导致匹配失效 - 查询条件格式错误:如果stu_id是字符串类型,查询条件需要加引号,写成
stu_id = '1',只有数字类型可以直接写stu_id = 1 - 关联数据不存在:确认stu_id=1的学生在student表中有有效记录,且该学生对应的stu_uid在guardian表中有绑定的监护人数据
优化后的可用SQL
子查询写法(兼容多监护人场景)
SELECT guardian_nm, guardian_age FROM guardian WHERE stu_uid IN (SELECT stu_uid FROM student WHERE stu_id = 1)
联表查询写法(执行效率更高,扩展更灵活)
SELECT g.guardian_nm, g.guardian_age FROM student s INNER JOIN guardian g ON s.stu_uid = g.stu_uid WHERE s.stu_id = 1
如果需要保留没有监护人的学生记录,把INNER JOIN替换为LEFT JOIN即可。
内容的提问来源于stack exchange,提问作者Kelvin
相关产品推荐
相关产品推荐

