首页 > 解决方案 > 三张表之间的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             |

谁能告诉我这是否正确?

标签: mysqlsql

解决方案


您的查询看起来是正确的。

我只需修改它以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不是没有反引号的有效列名。


推荐阅读