我在 mysql 工作,我了解表关系“连接”等, 我有三个不同的表,每个表都有列
id
,我想将所有三个 id 组合在一个主表中,因为我想在一张表中获取所有 id
后应用内连接。
您能告诉我如何将所有三个 id 放入一张表中吗?我知道外键和主键,但我不知道如何在这里应用它......或者有什么简单的方法吗?
我的桌子是:
主表是
table 4
,其中将包含以下列:
student_id, teachers_id, class_id
我正在尝试生成时间表,我想将
student_id
,teachers_id
和class_id
放入主表time_table
中。我正在尝试进行规范化,这样我就不必一次又一次地重复所有名称,我可以使用 id 来调用任何班级名称、教师名称、科目名称等,所有 id 都是表中的主键。
在这种情况下关系是一对一的
谢谢你
创建表如下,
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
试试这个...如果需要任何说明,请回复我..
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
我的理解,如有错误请指正, 一个班级有一名老师,简单来说,一个老师教一个或多个班级(更复杂的情况是每个班级不止一个老师): 关系是一对多,因此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 个实体的唯一组合将出现一次