Sql 更新中间表
关于如何创建和更新中间表,我有两个问题。例如,我有两个表,学生和科目模块,它们具有多对多关系,它们看起来如下:Sql 更新中间表,sql,postgresql,Sql,Postgresql,关于如何创建和更新中间表,我有两个问题。例如,我有两个表,学生和科目模块,它们具有多对多关系,它们看起来如下: student class student_id student_name class_id class_name 1 John 1 Economics 2 Mary 2
student class
student_id student_name class_id class_name
1 John 1 Economics
2 Mary 2 Physics
insert into studentclasses (student_id, class_id)
select s.student_id, c.class_id
from (values ('John', 'Physics'),
('Mary', 'Economics'),
('Mary', 'Physics')
) v(student_name, class_name) join
student s
on s.student_name = v.student_name join
class c
on c.class_name = v.class_id;
中间表如下所示,其中John只上物理课,而Mary同时上物理课和经济学课:
studentclasses
id student_id class_id
1 1 2
2 2 1
3 2 2
我的第一个问题是:因为学生表和班级表都很小,所以我可以手动创建中间表。在处理较大的数据集时,如何创建中间表
我的第二个问题:如果我想收到一个包含所有信息的新条目,即学生姓名、学生班级
,那么我如何将这个新条目更新到我的中间表中
另外,我正在使用Postgresql,我想你想要这样的东西:
student class
student_id student_name class_id class_name
1 John 1 Economics
2 Mary 2 Physics
insert into studentclasses (student_id, class_id)
select s.student_id, c.class_id
from (values ('John', 'Physics'),
('Mary', 'Economics'),
('Mary', 'Physics')
) v(student_name, class_name) join
student s
on s.student_name = v.student_name join
class c
on c.class_name = v.class_id;
也就是说,您有一个学生名/类名对的来源。在这个查询中,它由values()
语句提供。然后,您可以将加入到相应的表中,以获得所需的ID
当然,如果您知道要开始使用的ID,则无需加入。您可以直接插入到表中。我想您需要这样的内容:
student class
student_id student_name class_id class_name
1 John 1 Economics
2 Mary 2 Physics
insert into studentclasses (student_id, class_id)
select s.student_id, c.class_id
from (values ('John', 'Physics'),
('Mary', 'Economics'),
('Mary', 'Physics')
) v(student_name, class_name) join
student s
on s.student_name = v.student_name join
class c
on c.class_name = v.class_id;
也就是说,您有一个学生名/类名对的来源。在这个查询中,它由values()
语句提供。然后,您可以将加入到相应的表中,以获得所需的ID
当然,如果您知道要开始使用的ID,则无需加入。您可以直接插入表格。是的,我想这就是我想要的。为了澄清一下,因为我刚刚开始学习sql,所以我可以用一个包含所有对的表来替换values()语句,对吗?@JasonTay。是的,你能做到。是的,我想这就是我想要的。为了澄清一下,因为我刚刚开始学习sql,所以我可以用一个包含所有对的表来替换values()语句,对吗?@JasonTay。是的,你能做到。