2

我有两张表,一张用于 regcourses,另一张名为 coursegroups。

课程组表

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;

课程表:

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');

对于课程组表中 csgrec 列的特定值,我想将 regcourses 表的 regstatus 字段更新为“2”。所以我的更新代码是:

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

但我的查询影响了这么多行而不是一行。因为我只想更改 csgrec=3 并且我的查询会影响与regcourses.regcourseID = coursesgroup.courseID condition. 请帮助我。

4

1 回答 1

1

首先,运行这个查询:

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

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

从您的insert陈述中,我看不出应该发生什么——从您显示的四行中,没有什么应该符合该连接条件。尝试插入并查看首先返回了多少行。

于 2012-09-18T15:48:56.283 回答