簡體   English   中英

更新連接查詢不更新表中的記錄

[英]Update Join Query not Updating Record in The Table

在我的考勤表中,我想從StudentCourse橋表更新帶有S_IDC_ID的記錄,但不更新。

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

當我用它來選擇和顯示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(主鍵))
  • 課程(C_ID(主鍵))
  • StudentCourse((S_ID,C_ID(外鍵))橋表)
  • 和考勤表(S_ID,C_ID(外鍵))

我正在做的是通過連接表並從所有這些表中選擇S_IDS_NameC_IDPre_AbsAttendance表列)列來顯示datagridview上的數據。

現在,我想在單擊按鈕時將datagridview的信息插入到考勤表中。

我已經通過使用datagrdview.rows[i].cell[2]屬性對出勤表進行簡單的插入查詢。

我想知道是否有更好的想法這樣做,以便我可以使用JOIN而不是使用帶for循環的datagridview屬性。

現在雖然我的出勤表是空的StudentCourseStudentCourse表中填充數據。

我想要的是顯示來自studentCourse表的記錄( S_IDC_ID )和來自Attendance表的( Pre_Abs )以及當我提交出勤時; 我希望它在出勤表中針對每個S_IDC_ID存儲Pre_abs記錄。

在此輸入圖像描述

我認為我不能再解釋了。

您已為表Attendance聲明了別名。 因此,您應該在列名之前使用別名引用作為其他表中也可用的相同列名。 你可以試試這個 -

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。 使用錯誤的過濾器可以導致更新表中的所有行出席。 請小心。

嗯。 我不明白你的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子句中)。 如果字段/值順序不匹配,則數據會混淆(如果查詢因數據類型錯誤而未失敗)!

最后但並非最不重要:如果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

希望這有所幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM