2

1 つは regcourses 用で、もう 1 つは coursegroups という名前の 2 つのテーブルを取得しました。

コースグループ テーブル

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

coursegroup テーブルの csgrec 列の特定の値に対して、regcourses テーブルの regstatus フィールドを「2」に更新したいと考えています。したがって、私の更新コードは次のとおりです。

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

しかし、私のクエリは1行ではなく非常に多くの行に影響を与えています。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ステートメントから、何が起こっているのかわかりません.あなたが示した4つの行から、その結合条件に一致するものは何もありません. 挿入を試して、最初に返される行数を確認してください。

于 2012-09-18T15:48:56.283 に答える