首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新联接查询不更新表中的记录

更新联接查询不更新表中的记录
EN

Stack Overflow用户
提问于 2019-05-09 23:08:06
回答 2查看 337关注 0票数 0

在我的考勤表中,我想从S_ID桥表中用C_IDStudentCourse更新记录,但是它没有更新。

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

当我使用它来选择和显示StudentCourse表中的2列和Attendance表中的1列时,它是工作的,但是当我使用它来更新考勤表时,它就不起作用了。

代码语言:javascript
复制
    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(主键))
  • 课程(C_ID(主键))
  • StudentCourse((S_ID,C_ID(外键))桥表)
  • 和考勤表(S_ID,C_ID(外键))

我要做的是通过连接表并从所有这些表中选择S_IDS_NameC_IDPre_Abs (Attendance表列)列来显示数据。

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

我已经通过使用datagrdview.rows[i].cell[2]属性对考勤表进行了简单的插入查询。

我想知道是否有更好的方法来这样做,这样我就可以使用JOIN而不是使用datagridview属性和for循环。

现在,我的考勤表是空的,而StudentCourseStudentCourse表都填充了数据。

我想要的是显示记录(S_IDC_ID)从studentCourse表和(Pre_Abs)从Attendance表和当我提交考勤;我希望它存储Pre_abs记录针对每个S_IDC_ID在考勤表。

我想我不能再解释了。

EN

回答 2

Stack Overflow用户

发布于 2019-05-10 10:28:11

您已经声明了表出勤的别名。因此,您应该在列名之前使用别名引用,因为在其他表中也可以使用相同的列名。你能试试这个-

代码语言:javascript
复制
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。在更新表考勤中的所有行时,使用错误的筛选器会产生结果。请小心点。

票数 0
EN

Stack Overflow用户

发布于 2019-05-10 12:26:04

嗯。我不明白为什么您的Attendance表首先存在。您的StudentCourse表似乎已经包含了哪些学生正在学习哪门课程的信息。我假设Attendance表必须处理一门课程中每一节课的学生出勤情况。

无论如何,正如@Psi已经注释过的那样,您最初似乎希望使用INSERT查询来创建Attendance表中的记录,其中包含基于StudentCourse表中信息的数据。我猜你想得太辛苦了。-)你可以尝试这样的方法:

代码语言:javascript
复制
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),则在连接这些表的相关记录时应使用该完整键:

代码语言:javascript
复制
FROM
    Attendance AS A
    LEFT JOIN StudentCourse AS SC ON
        SC.S_ID = A.S_ID AND
        SC.C_ID = A.C_ID

希望这能帮点忙..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56068672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档