簡體   English   中英

MySQL 三表間查詢

[英]MySQL query between three tables

我有三個表學生、角色、學生角色(只有學生 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有多個role ,您將使用此查詢返回多行。 你可能沒想到會這樣。

順便說一句,我建議不要在列名中使用連字符 ( - )。

編輯

在@Strawberry 的評論之后,我在列名中添加了反引號。 當然, 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';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM