当新数据在另一个表中可用时更新表

时间:2013-12-28 16:18:37

标签: mysql sql

我有两张桌子: enter image description here

使用此查询在学生表格中填写所有“id”的标记表:

$module1= "insert into marks (stud_id,moduleID) 
           select sid, 1 
            from user_student 
            where sid not in (
                select * from (
                     select distinct stud_id from marks where moduleID=1
                ) alias_name
             )";

所以我需要从表学生中取出所有'sid',然后将它们填入表格标记我的查询就完成了所有这些。我遇到的问题是每次我对数据进行更改,例如列 test1 时,会再次插入新记录。

如果我手动填充标记表,我不能拥有一个代码,当学生表中有新数据时,数据只会在标记表中更新...

2 个答案:

答案 0 :(得分:0)

我不理解您的插入查询的某些要点,为什么在sid中插入stud_id如果学生表中有id来关联它们?

也许解决您的问题是创建moduleIDstud_id的组合唯一键,并使用REPLACE代替INSERT

但正确的做法是使用TRIGGER之类的:

DROP TRIGGER IF EXISTS `student_after_insert`;
CREATE TRIGGER `student_after_insert` AFTER INSERT ON `student` 
 FOR EACH ROW INSERT INTO marks (stud_id,moduleID) 
 SELECT NEW.`id`, `modules_table`.`id` FROM `modules_table`;

PS:我想你有一个名为modules_table的模块表。相应地改变它。

答案 1 :(得分:0)

我无法理解你的问题,我的提示是:

marks表上建立一个唯一约束(由您决定最佳约束规则)。 然后使用触发器进行正确的插入/更新: 这样的事情,(希望语法是正确的):

CREATE TRIGGER myTrigger
AFTER INSERT ON students
FOR EACH ROW
BEGIN
    // check that insertion doesn't broke the constraint previously define, then 
    insert into marks (stud_id,moduleID) values (new.sid, 1);
END

注意:NEW是您在学生上很快插入/更新的行。类似你有OLD metarow。