首页 > 解决方案 > 更新联接查询不更新表中的记录

问题描述

在我的出勤表中,我想用桥接表更新记录,但它没有更新S_IDC_IDStudentCourse

https://imgur.com/a/7ZBItur

当我使用它来选择和显示表格中的 2 列和StudentCourse表格中的 1 列Attendance时它可以工作,但是当我使用它来更新目前为空的出勤表时它不起作用

    UPDATE Attendance
    SET S_ID = sc.S_ID,
    C_ID = sc.C_ID
    FROM Attendance a
    left outer join StudentCourse sc ON a.S_ID = sc.S_ID
    WHERE sc.S_ID=2 and sc.C_ID=2

在此处输入图像描述

实际上有两个四个表:

我正在做的是datagridview通过连接表并从所有这些表中选择、 和S_IDS_Name表列)列来显示数据。C_IDPre_AbsAttendance

datagridview现在,当我单击按钮时,我想将存在的信息插入到考勤表中。

我已经通过使用datagrdview.rows[i].cell[2]属性对出勤表进行简单的插入查询来完成此操作。

我想知道是否有更好的想法来做到这一点,以便我可以使用JOIN而不是使用datagridview带有 for 循环的属性。

目前,我的出勤表是空的,而StudentCourseStudentCourse表中都填满了数据。

我想要的是从表中显示记录(S_IDC_ID)和从studentCourse表中显示(Pre_AbsAttendance以及当我提交出勤时;我希望它在出勤表中存储Pre_abs针对每个的记录S_IDC_ID

在此处输入图像描述

我不认为我可以进一步解释它。

标签: c#sqlsql-server

解决方案


嗯。我不明白您的Attendance表首先存在的原因。您的StudentCourse表格似乎已经包含有关哪些学生正在学习哪些课程的信息。我只是假设该Attendance表必须处理课程中每个讲座/课程的学生出勤率。

无论如何,正如@Psi 已经评论的那样,您最初似乎希望一个 INSERT 查询在表中创建一条记录,其中Attendance包含基于表中信息的数据StudentCourse。我猜你是想得太用力了。;-) 你可以尝试这样的事情:

INSERT INTO Attendance (S_ID, C_ID, Pre_Abs)
SELECT S_ID, C_ID, Pre_Abs
FROM StudentCourse
WHERE S_ID = 2 AND C_ID = 2

但是,目前尚不清楚Pre_Abs应如何填写字段...您尝试从 table 获取它Attendance,但这似乎是无效的。

此外,在创建 INSERT 查询时,请确保源数据值(在 SELECT 或 VALUES 子句中)与目标字段(在 INSERT 子句中)的顺序相同。如果字段/值顺序不匹配,则数据会混淆(如果查询没有因数据类型错误而失败)!

最后但并非最不重要的一点是:如果AttendanceStudentCourse表共享相同的复合键(S_ID, C_ID),则在连接这些表的相关记录时应该使用该完整键:

FROM
    Attendance AS A
    LEFT JOIN StudentCourse AS SC ON
        SC.S_ID = A.S_ID AND
        SC.C_ID = A.C_ID

希望这有所帮助...


推荐阅读