我在下表之间建立了多对多的关系,我做得对吗?其次,我想要一个连接查询

时间:2014-04-29 10:13:41

标签: mysql sql sql-server database join

下表之间有很多关系:

create table instructors
(i_id int not null identity(1,1) primary key,
i_name varchar(50), etc...)

create table members
(
m_id int not null identity(1,1) primary key,
m_name varchar(50, etc...))

create table schedule
(sch_id int not null identity(1,1) primary key,
sch_session varchar(10))<BR>
-- session is(morning, afternoon, evening)<br>

贝娄是我的联络表

create table Ins_Mem_Sch
(ins_mem_sch_id int not null identity(1,1) primary key,
i_id int not null foreign key references instructors(i_id),
m_id int not null foreign key references members(m_id),
sch_id int not null foreign key references schedules(sch_id)
)

我想知道我到目前为止做了什么是正确的,其次我试图通过查询加入他们,但我不能,也许是因为我没有练习加入多对多的关系,我不是一个完美的程序员,所以我想要一个连接查询来从所有表中获取数据。 非常感谢你的帮助 的问候,

2 个答案:

答案 0 :(得分:0)

表格看起来很好,上一张表Ins_Mem_Sch不需要主键ins_mem_sch_id

现在加入这些表格非常简单。考虑如果表Ins_Mem_Sch中有i_id , m_id and sch_id行,您可以使用以下类型的联接

(我提供了MYSQL示例,因为您使用MYSQL标记了问题)

select 
i.i_name,
m.m_name,
s.sch_session 
from 
Ins_Mem_Sch ims
inner join instructors i on i.i_id = ims.i_id
inner join members m on m.m_id = ims.m_id
inner join schedule s on s.sch_id = ims.sch_id

以上只是列出与所有表匹配的数据的示例。 在许多其他情况下,您可能需要根据要求获取数据,而不知道这些数据很难评论。

答案 1 :(得分:0)

即使您的要求不明确,但您可以在查询中使用联接,如下所示:

SELECT 
DISTINCT ins.i_name,mmb.m_name,sch.sch_session 
FROM Ins_Mem_Sch ims 
JOIN instructors ins ON ims.i_id=ins.i_id 
JOIN members mmb ON mmb.m_id=ims.m_id 
JOIN `schedule` sch ON sch.sch_id=ims.sch_id 
WHERE your_col='your_value';