我有三列,我想将它们全部合并到一个 main_table 中

问题描述 投票:0回答:3

我在 mysql 工作,我了解表关系“连接”等, 我有三个不同的表,每个表都有列

id
,我想将所有三个 id 组合在一个主表中,因为我想在一张表中获取所有
id
后应用内连接。

您能告诉我如何将所有三个 id 放入一张表中吗?我知道外键和主键,但我不知道如何在这里应用它......或者有什么简单的方法吗?

enter image description here

我的桌子是:

  • 表 1 包含:student_id 列
  • 表 2 包含:teachers_id
  • 表3包含:class_id

主表是

table 4
,其中将包含以下列:

student_id, teachers_id, class_id 

我正在尝试生成时间表,我想将

student_id
teachers_id
class_id
放入主表
time_table
中。我正在尝试进行规范化,这样我就不必一次又一次地重复所有名称,我可以使用 id 来调用任何班级名称、教师名称、科目名称等,所有 id 都是表中的主键。

在这种情况下关系是一对一的

谢谢你

php mysql sql mysqli
3个回答
0
投票

创建表如下,

 create table subject(subject_id int primary key,sub_name varchar(20))
 create table teacher(teacher_id int primary key,teacher_name varchar(20))
 create table class(class_id int primary key,class_sec varchar(20))

 create table timetable(t_id int primary key,subject_id int references 
 subject(subject_id)
 ,teacher_id int references teacher(teacher_id),class_id int references 
 class(class_id))

插入样本值

 insert into subject values(1,'Tamil')
 insert into teacher values(1,'Pugal')
 insert into class values(1,'12th A')
 insert into timetable values(1,1,1,1)

使用内连接来连接表,

 select s.sub_name,t.teacher_name,c.class_sec from timetable t1 
 inner join subject s
 on s.subject_id = t1.subject_id inner join teacher t
 on t.teacher_id = t1.teacher_id inner join class c
 on c.class_id   = t1.class_id

试试这个...如果需要任何说明,请回复我..


0
投票
SELECT Teachers.teacher_name, Class.class_sec, Subjects.subject_name FROM timetable
INNER JOIN Teachers ON Teachers.teacher_id = timetable.teacher_id
INNER JOIN Class ON Class.class_id = timetable.class_id
INNER JOIN Subjects ON Subjects.subject_id = timetable.subject_id

0
投票

我的理解,如有错误请指正, 一个班级有一名老师,简单来说,一个老师教一个或多个班级(更复杂的情况是每个班级不止一个老师): 关系是一对多,因此class表应该保存一个teacher_id

一个学生可以选多个班级,但一个班级有很多学生,那么关系就是多对多, 应该创建一个新表 class_per_student

当然,我们需要用相关信息填充它们,

完成后,我们可以连接所有相关表并获取时间表

添加教师_id 列:

ALTER TABLE class ADD COLUMN teacher_id INT(9) NOT NULL;
ALTER TABLE class ADD KEY teacher_id (teacher_id);

创建多对多表

CREATE TABLE class_per_student (
 id INT(11) NOT NULL AUTO_INCREMENT,
 class_id INT(9) NOT NULL,
 student_id INT(9) NOT NULL,
 PRIMARY KEY id (id),
 KEY class_id (class_id),
 KEY student_id (student_id)
);

时间表选择:

SELECT
 cps.class_id,
 cps.student_id,
 c.teacher_id
FROM
 class_per_student cps
 INNER JOIN class c ON c.id = cps.class_d
;

请注意,由于所有实体之间的关系是多对多的,因此每个实体(班级、教师、学生)都会出现多次,但 3 个实体的唯一组合将出现一次

© www.soinside.com 2019 - 2024. All rights reserved.