Mysql 我在以下表格之间建立了多对多关系,我做得对吗?第二,我想要一个连接查询

Mysql 我在以下表格之间建立了多对多关系,我做得对吗?第二,我想要一个连接查询,mysql,sql,sql-server,database,join,Mysql,Sql,Sql Server,Database,Join,以下表格之间存在多对多关系: 我想知道到目前为止我所做的是否正确,其次我尝试通过查询连接它们,但我不能,可能是因为我没有练习多对多关系的连接,我不是一个完美的程序员,所以我想要一个连接查询来从所有表中获取数据。 谢谢你的帮助。 在这方面,这些表看起来不错,唯一的优点是最后一个表Ins\u Mem\u Sch不需要主键Ins\u Mem\u Sch\u id 现在加入这些表格非常容易。考虑在表中有IIID、MyID和SyIID的行中的行时,可以使用以下类型的连接< /P> 我提供了一个MYSQL示

以下表格之间存在多对多关系:

我想知道到目前为止我所做的是否正确,其次我尝试通过查询连接它们,但我不能,可能是因为我没有练习多对多关系的连接,我不是一个完美的程序员,所以我想要一个连接查询来从所有表中获取数据。 谢谢你的帮助。
在这方面,

这些表看起来不错,唯一的优点是最后一个表Ins\u Mem\u Sch不需要主键Ins\u Mem\u Sch\u id

现在加入这些表格非常容易。考虑在表中有IIID、MyID和SyIID的行中的行时,可以使用以下类型的连接< /P> 我提供了一个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
上面只是列出与所有表匹配的数据的示例。
在许多其他情况下,您可能需要根据要求获取数据,而在不知道这些情况下,很难对其进行评论。

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

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';

是的,这些表看起来不错,只有一件事就是从Ins_Mem_Sch中删除主键,这不是必需的,您想显示什么样的数据?谢谢您的评论,您的意思是我完全删除Ins_Mem_Sch_id列?我想显示*成员、讲师,以及他们的schedules@AbhikChakraborty主键是绝对必需的,而不是ins_mem_sch_id列!除非您的应用程序在Ins_Mem_Sch上有一个删除操作,否则它是不需要的。在这种情况下,您可以保留Ins_Mem_Sch_id,因为在主键上删除更快。但是如果它不在那里,那么就删除它。@是的,列绝对需要PK,我给出了为什么在表Ins_Mem_Sch中应该保留Ins_Mem_Sch_id或者为什么不保留Ins_Mem_Sch_idA主键是关系表的先决条件。在这种情况下,我们有一个非常好的自然复合候选密钥i_id,m_id,可以设置为主密钥,这意味着不需要代理密钥。非常感谢亲爱的@Abhik Chakraborty,有一件事我仍然感到困惑,那就是我应该删除ins_mem_sch或notOk列亲爱的,再次感谢您快速完整的回答
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
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';