mysql - 三张表之间的MySQL查询
问题描述
我有三个表学生、角色、学生角色(只有学生 ID 和角色 ID)。我想通过检查学生姓名(在学生表中)来返回角色(在角色表中)。
我试过:
select role from role rr
join student-role sr on sr.role-id=rr role-id
join student ss on sr.student-id=ss.student-id
where ss.name="xxx"
我的桌子是:
Role
Role-id | Role |
-------------+---------------+
1 | admin |
2 | whatever |
Student
Student-id | name |
-------------+---------------+
1 | aaaaaaaa |
2 | bbbbbbbb |
Studnet-role
id | Role-id |student-id |
-------------+---------------+--------------+
1 | 1 |2 |
2 | 2 |1 |
谁能告诉我这是否正确?
解决方案
您的查询看起来是正确的。
我只需修改它以student
从那里开始并加入其他表:
SELECT r.role
FROM student s
INNER JOIN `student-role` sr ON sr.`student-id` = s.`student-id`
INNER JOIN role r ON r.`role-id` = sr.`role-id`
WHERE (s.name = "xxx")
当然,如果 astudent
有多个role
,您将使用此查询返回多行。你可能没想到会这样。
顺便说一句,我建议不要-
在列名中使用连字符 ( )。
编辑
在@Strawberry 的评论之后,我在列名中添加了反引号。当然student-id
不是没有反引号的有效列名。
推荐阅读
- ssl - 证书固定 - 刷新固定的证书机制
- alpine.js - 如何在 alpine.js 应用程序中使用时间间隔制作计时器
- reactjs - 为我的状态赋值时出现解析错误
- python - tkinter 使用按钮名称的变量来设置状态引发错误
- mysql - MySQL 5.7 通过相同的 uid 但不同的关键字选择记录
- typescript - 当属性因窗口调整大小而改变时,点亮元素(打字稿)不会重新渲染
- javascript - 在菜单中选择当前链接
- c++ - 在现代 C++ 中,是否仍应使用 volatile 与 ISR 共享数据?
- discord.py - 只允许特定角色使用命令
- django - 覆盖相关经理以添加其他过滤器