数据库登录校验:如何判断用户属于Teachers表还是Students表?
解决用户身份判断的SQL问题
你原来的SQL写法逻辑有误:把Teachers和Students做笛卡尔积后,要求两张表中同时存在同一个用户名才返回结果,但用户只会属于其中一类,所以永远查不到数据。
给你两种可行的解决方法:
方法一:合并查询一次获取结果
用UNION ALL把两张表的查询结果合并,新增一个标识字段区分用户类型:
SELECT 'teacher' AS user_type, * FROM `Teachers` WHERE username='user\'s name' UNION ALL SELECT 'student' AS user_type, * FROM `Students` WHERE username='user\'s name'
这个语句会返回匹配的用户数据,user_type字段会明确显示是teacher还是student;如果用户不存在,结果集为空。
方法二:分步查询验证
先查询Teachers表,如果有匹配结果,说明是老师;如果没有,再查询Students表:
- 先执行:
SELECT * FROM `Teachers` WHERE username='user\'s name'
- 若结果不为空,判定为老师;否则执行:
SELECT * FROM `Students` WHERE username='user\'s name'
如果这个查询有结果,就是学生;否则用户不存在。
内容的提问来源于stack exchange,提问作者Muaviya
相关产品推荐
相关产品推荐

