Mysql 连接两个表并使用副本保存到第三个表中

Mysql 连接两个表并使用副本保存到第三个表中,mysql,sql,Mysql,Sql,我有两张桌子(多对多): 学生 +-------------------+ |ID |姓名|地址| +-------------------+ |1 |鲍勃|拉| |2 | Ace | NY | |3 |测试|拉| +-------------------+ 教授 +-------------------+ |idp |姓名|地址| +-------------------+ |1 |乔恩|拉| |2 |塔兹|拉| |3 |测试|拉| +-------------------+ 我想展示所有以乔

我有两张桌子(多对多):

学生 +-------------------+ |ID |姓名|地址| +-------------------+ |1 |鲍勃|拉| |2 | Ace | NY | |3 |测试|拉| +-------------------+ 教授 +-------------------+ |idp |姓名|地址| +-------------------+ |1 |乔恩|拉| |2 |塔兹|拉| |3 |测试|拉| +-------------------+ 我想展示所有以乔恩为教授的学生。为了做到这一点,我想我需要一个idp和ID上有外键的第三个表

如何将两个表合并为一个


此外,我如何显示(使用union)居住在洛杉矶的人的姓名?一个只有一位教授的学生:

不需要第三个表,只需在Student表中添加外键(idp=Professor ID),即可执行以下操作:

SELECT * FROM Student 
    JOIN Professor ON Student.idp = Professor.idp 
    WHERE Professor.Name = 'Jon' 
这样你就可以让所有有乔恩做教授的学生

一名学生兼多名教授

如果一个学生有多个教授。当然你需要第三张桌子。像这样的事情:

Student_Professor {StudentID, ProfessorID} // Compound key
创建第三个表的另一种方法是:

Student_Professor {StudentProfessorID, StudentID, ProfessorID} 
其中StudentProfessorID是您的主键,其余为外键。。这种情况的优点是,您只需要处理一个主键,而不是复合键

查询

假设第三个表是这样的:Student_Professor{StudentID,ProfessorID}

我们可以使用:

SELECT * FROM Student_Professor 
    JOIN Student ON Student.StudentID = Student_Professor.StudentID
    JOIN Professor ON Professor.ProfessorID = Student_Professor.ProfessorID
WHERE Professor.Name = 'Jon' 

要过滤数据,您需要使用where子句

where子句将出现在语句末尾,其语法如下:

SELECT *columns* FROM *table* WHERE *some condition*
union运算符用于将两个语句连接在一起

所以

在工会的末尾加上where条款,你就有了洛杉矶居民的答案


要将具有多对多关系的两个表连接在一起,需要使用所谓的映射表。也就是说,一个有两列的表。一个用于教授id,另一个用于学生id,描述每个教授和每个学生之间存在的每个关系。

假设每个学生都有每个教授,您可以通过交叉联接在联接表中创建记录,如下所示:

交叉连接将表A中的每一行与表B中的每一行连接起来,从而生成笛卡尔乘积

假设一个名为Student_Professor的表包含StudentId和ProfessorId列:

insert into Student_Professor (StudentId, ProfessorId)
select Student.ids, Professor.idp
from Student
cross join Professor

在学生表中添加外键(idp=Professor ID)不会限制我每个学生只有一个教授吗?我想要一个多对多的关系(每个学生可以有多个教授和其他方式)是的,在这种情况下,你需要第三张桌子。我更新了我的答案,检查它。我手动将值插入第三个表中?我不能使用join合并旧的2吗?当然,让我们为您编写查询。!现在非常感谢大家帮助我:)第三个表必须手动填充吗?我不能将两个现有的表合并为一个吗?@user3171222您目前如何知道哪些学生有哪些教授?任务没有指定哪些学生有哪些教授,这就是为什么我假设所有学生都有所有教授的原因。@user3171222如果是这样,请检查插入ID、学生ID、,和professor ID通过交叉连接进入第三个表。
SELECT *columns* FROM *table* WHERE *some condition*
SELECT *columns* FROM *table*
UNION
SELECT *columns* FROM *table*
insert into Student_Professor (StudentId, ProfessorId)
select Student.ids, Professor.idp
from Student
cross join Professor