动态插入/更新正在使用来自另一个表的数据的列

时间:2019-07-17 19:07:07

标签: mysql sql join ssms sql-insert

我想获取与每个特定StudentID相关的所有学分时数的总和,因此,每次我将一名学生注册为一门课程,甚至更改任何课程的学分时,它都会更新“ TotalCreditHours”列。 / p>

INSERT INTO Student (StudentFirstName, StudentLastName, StudentEmail, 
    StudentPhoneNo, HomeState,
    BirthDate, Gender, TotalCreditHours, GPA, SemesterEnrolled, Program) 
    VALUES('Isiah', 'Thomas', 'ithomas058@msu.edu', '417-822-7732', 'MI', '08- 
    15-1994', 'M', 
    (SELECT SUM(CreditHours) FROM Enrolled JOIN Course ON Enrolled.CourseID = 
    Course.CourseID WHERE StudentID = 1), 3.3, 'Fall', 1)

coursetable enrolledtable studenttable

仅当“已注册”表中的课程中已有该StudentID时,我的查询才有效。如果我先创建学生然后注册他们,则它将为NULL。我想知道是否有一种方法可以动态更新TotalCreditHours,即使我先创建了Student。

在屏幕快照中,由于ssms尚未更新,因此将“ TotalCreditHours”显示为NOT NULL。它允许空值,因此仍可以创建没有学分的学生。

1 个答案:

答案 0 :(得分:0)

您可以使用INSERT SELECT

INSERT INTO Student (StudentFirstName, StudentLastName, StudentEmail, 
StudentPhoneNo, HomeState,
BirthDate, Gender, TotalCreditHours, GPA, SemesterEnrolled, Program) 
SELECT 'Isiah', 'Thomas', 'ithomas058@msu.edu', '417-822-7732', 'MI', '08- 
15-1994', 'M', SUM(CreditHours) , 3.3, 'Fall', 1
FROM Enrolled 
JOIN Course ON Enrolled.CourseID = Course.CourseID 
WHERE StudentID = 1

但是如果您需要更新(在mysql中)

update  Student 
set  TotalCreditHours = (
    SELECT SUM(CreditHours) 
    FROM Enrolled JOIN Course ON Enrolled.CourseID =   Course.CourseID
    WHERE StudentID = 1)
where student.id = 1