2016-03-01 83 views
1

我在ClassSelector DB兩個表:創建INNER_JOIN表或創建新表的MySQL

學生

student_id數據| student_name |家鄉

類標識碼| classname |描述

我正在嘗試編寫一個程序,該程序將接受用戶輸入的student_id並允許他們從類ID列表中選擇一個類。我希望應用程序將student_id,student_name,class_id,classname寫入單獨的表中。要做到這一點,那將是最好創建一個新的表(student_x_class),並使用INSERT語句:

INSERT INTO ClassSelector.student_x_class ClassSelector.students.student_id,ClassSelector.students.student_name, ClassSelector.classes.class_id,ClassSelector.classes.classname VALUES(W, X, Y, Z); 

或創建的類表(student_x_class)新的一列,並以此作爲一個外鍵student_id列並使用內部連接。

對不起,如果這是混淆,我是MySQL的新手。任何幫助,將不勝感激!

ResultSet rs3 = myStmt3.executeQuery("SELECT * FROM ClassSelector.classes WHERE class_id = " + selectedClass); 
    while(rs3.next()){ 
          String innerJoin = (userEnterId + " has been added to " + rs3.getString("classname") + " " + rs3.getString("class_id")); 
          System.out.println(innerJoin); 
          String student_classJoin = "INSERT INTO students_x_classes" + "(student_name, class_id, classname)" + "VALUES (?, ?, ?)"; 
          PreparedStatement pStmt = con.prepareStatement(student_classJoin); 
          pStmt.setString(1, userEnterId); 
          pStmt.setString(2, rs2.getString("class_id")); 
          pStmt.setString(3, rs2.getString("classname")); 
          pStmt.executeUpdate(); 
          input.close(); 
         } 
+0

對不起,radoh,我改變了說INSERT INTO students to students_x_classes的地方。我想從students表和classes表中取出列並將它們插入到students_x_classes表中;我認爲我這樣做不正確。 – Rassisland

回答

2

由於學生類是M:N關係(指1名學生可以參加許多類和1類可以有很多同學)我會建議你創建表student_x_class的列(class_id, student_id)

然後你就可以選擇特定學生的所有類用一個簡單的加入選擇

SELECT * 
FROM students s 
    INNER JOIN student_x_class sc ON sc.student_id = s.student_id 
    INNER JOIN classes c ON c.class_id = sc.class_id 
WHERE s.student_id = ? 

當你想INSERT行到student_x_class表,你不需要加入任何東西。只需插入class_id和student_id對(不需要該表中的類名),例如

String student_classJoin = "INSERT INTO student_x_class" + "(student_id, class_id)" + "VALUES (?, ?)"; 

而且不要忘記調整的結合,即刪除線pStmt.setString(3, rs2.getString("classname"));

順便說一句,這是非常基本的東西,試着讀了一些書SQL /教程獲取的整個概念。

+0

那麼「?」是用戶輸入的學生ID? – Rassisland

+0

@Rassisland是 – radoh

+0

好的,謝謝! 現在,如果我想讓這個MySQL語句在Java應用程序中,並通過java將這個inner_join寫入數據庫,我該怎麼做? – Rassisland

0

這取決於學生關係的性質。如果一個給定的類只與一個學生相關(讓我們想象它的委託或類似的東西),那麼在classes表中的外鍵就足夠了。如果一個班級可以與多個學生相關,那麼您應該考慮創建一個新表格來建模該關係。如果你使用第二種方法,一個好的建議是在新表中只包含兩個ID。