三个表之间的MySQL查询

三个表之间的MySQL查询,mysql,sql,Mysql,Sql,我有三个表:学生、角色、学生角色(只有学生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 | --

我有三个表:学生、角色、学生角色(只有学生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")
当然,如果一个
学生
有多个
角色
,则此查询将返回多行。你可能没想到

顺便提一下,我建议不要在列名中使用连字符(
-

编辑


我在@草莓的评论后面的列名中添加了反勾号。当然,
student id
不是没有反勾的有效列名。

您的查询看起来是正确的

我只需将其修改为从
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")
当然,如果一个
学生
有多个
角色
,则此查询将返回多行。你可能没想到

顺便提一下,我建议不要在列名中使用连字符(
-

编辑


我在@草莓的评论后面的列名中添加了反勾号。当然,
student id
不是没有反勾的有效列名。

我已经修改了列名和表,以便清楚地理解

create table role (role_id integer, role varchar(100));
create table std (std_id integer, name varchar(100));
create table std_role (id integer, role_id integer , std_id integer);


insert into role (role_id, role) values(1, "admin");
insert into role (role_id, role) values(2, "whatever");

insert into std (std_id, name) values(1, "aaaa");
insert into std (std_id, name) values(2, "bbbb");

insert into std_role (id,role_id,std_id) values(1,1,2);
insert into std_role (id,role_id,std_id) values(1,2,1);


SELECT role.* FROM std_role
INNER JOIN std ON (std.std_id=std_role.std_id)
INNER JOIN role ON (role.role_id=std_role.role_id)
WHERE std.name = 'aaaa';

我修改了列名和表,以便清楚地理解

create table role (role_id integer, role varchar(100));
create table std (std_id integer, name varchar(100));
create table std_role (id integer, role_id integer , std_id integer);


insert into role (role_id, role) values(1, "admin");
insert into role (role_id, role) values(2, "whatever");

insert into std (std_id, name) values(1, "aaaa");
insert into std (std_id, name) values(2, "bbbb");

insert into std_role (id,role_id,std_id) values(1,1,2);
insert into std_role (id,role_id,std_id) values(1,2,1);


SELECT role.* FROM std_role
INNER JOIN std ON (std.std_id=std_role.std_id)
INNER JOIN role ON (role.role_id=std_role.role_id)
WHERE std.name = 'aaaa';

您尝试的查询有什么问题?是否在表/列标识符中包含“-”。您尝试的查询有什么问题?是否在表/列标识符中包含“-”。还有一个问题,如何将用户插入到数据库中的三个表中?插入学生,然后获取学生id?然后使用学生id和角色id插入学生角色?@DavidShi这是正确的,但是如果您需要更多详细信息,我建议添加一个进一步的问题。还有一个问题,我如何将用户插入数据库中的三个表中?插入学生,然后获取学生id?然后在学生角色中插入学生id和角色id?@DavidShi,这是正确的,但是如果您需要更多详细信息,我建议添加一个进一步的问题。