如何通过在mysql中连接两个表来更新一个表?

时间:2012-09-18 15:41:57

标签: mysql sql

我有两个表用于注册,另一个用于命名课程组。

课程组表

CREATE TABLE coursesgroup (
  csgrec int(11) unsigned NOT NULL auto_increment,
  courseID int(11) default NULL,
  classID int(11) default NULL,
  studgroup varchar(20) default NULL,
  studnum int(11) default NULL,
  PRIMARY KEY  (csgrec)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

regcourses表:

CREATE TABLE regcourses (
  regrec int(11) unsigned NOT NULL auto_increment,
  regsemrec int(11) default NULL,
  regstudID int(11) default NULL,
  regcourseID int(11) default NULL,
  regstatus int(11) default '0',
  yearsem int(11) default '2012',
  monthsem1 int(11) default '3',
  classID int(11) default '1',
  PRIMARY KEY  (regrec)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

插入声明:

INSERT INTO coursesgroup VALUES ('2', '20', '1', 'BBA1009A1', '11');
INSERT INTO coursesgroup VALUES ('3', '20', '1', 'BBA1009B1', '4');

INSERT INTO regcourses VALUES ('2', '1', '98', '47', '0', '2012', '3', '1');
INSERT INTO regcourses VALUES ('4', '1', '98', '101', '0', '2012', '3', '1');

我想将regcourses表的regstatus字段更新为“2”,以获取coursesgroup表中csgrec列的特定值。所以我的更新代码是:

UPDATE regcourses JOIN coursesgroup ON regcourses.regcourseID = coursesgroup.courseID 
Set regcourses.regstatus =2
WHERE  coursesgroup.csgrec=3

但是我的查询影响了很多行而不是一行。因为我只想更改csgrec = 3而我的查询会影响与regcourses.regcourseID = coursesgroup.courseID condition匹配的所有行。请帮帮我。

1 个答案:

答案 0 :(得分:1)

首先,运行此查询:

SELECT * FROM regcourses
JOIN coursesgroup ON regcourses.regcourseID = coursesgroup.courseID 
WHERE  coursesgroup.csgrec=3

(这与您的更新基本相同,没有进行任何更新。)这将告诉您连接是否错误;如果你匹配太多行。

从您的insert声明中,我无法看到应该发生的事情 - 从您显示的四行中,没有任何内容符合该连接条件。尝试插入并查看首先返回的行数。