在我的考勤表中,我想从S_ID桥表中用C_ID和StudentCourse更新记录,但是它没有更新。
当我使用它来选择和显示StudentCourse表中的2列和Attendance表中的1列时,它是工作的,但是当我使用它来更新考勤表时,它就不起作用了。
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

实际上有两张桌子:
我要做的是通过连接表并从所有这些表中选择S_ID、S_Name、C_ID和Pre_Abs (Attendance表列)列来显示数据。
现在,当我点击按钮时,我想将datagridview中的信息插入到考勤表中。
我已经通过使用datagrdview.rows[i].cell[2]属性对考勤表进行了简单的插入查询。
我想知道是否有更好的方法来这样做,这样我就可以使用JOIN而不是使用datagridview属性和for循环。
现在,我的考勤表是空的,而Student、Course和StudentCourse表都填充了数据。
我想要的是显示记录(S_ID,C_ID)从studentCourse表和(Pre_Abs)从Attendance表和当我提交考勤;我希望它存储Pre_abs记录针对每个S_ID,C_ID在考勤表。

我想我不能再解释了。
发布于 2019-05-10 10:28:11
您已经声明了表出勤的别名。因此,您应该在列名之前使用别名引用,因为在其他表中也可以使用相同的列名。你能试试这个-
UPDATE a
SET a.S_ID = sc.S_ID,
a.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我也怀疑你的条件,因为你是更新表出勤,但过滤记录的表StudentCourse。在更新表考勤中的所有行时,使用错误的筛选器会产生结果。请小心点。
发布于 2019-05-10 12:26:04
嗯。我不明白为什么您的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 .您试图从表Attendance中获取它,但这似乎是无效的。
此外,在创建INSERT -查询时,请确保源数据值(在SELECT或values子句中)与目标字段(INSERT子句中)的顺序相同。如果字段/值顺序不匹配,数据就会被混淆(如果查询没有因为数据类型错误而失败)!
最后但并非最不重要的一点是:如果Attendance表和StudentCourse表共享相同的复合键(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希望这能帮点忙..。
https://stackoverflow.com/questions/56068672
复制相似问题