2012-09-18 3 views
2

나는 두 개의 테이블을 하나씩 가지고 있는데 하나는 레지스탕스이고 다른 하나는 코스 그룹이라고합니다.mysql에서 두 테이블을 조인하여 하나의 테이블을 업데이트하는 방법은 무엇입니까?

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; 

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'); 
,536,913,632 10

코스 그룹 테이블의 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과 일치하는 모든 줄에 영향을줍니다. 이것 좀 도와주세요.

답변

1

첫째,이 쿼리 실행

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

을 (. 즉, 업데이트를하지 않고, 기본적 업데이트와 동일합니다) 당신의 참여가 잘못되면 당신에게 말할 것이다; 너무 많은 행을 일치시키는 경우

insert 문장에서 볼 수있는 것이 무엇인지 알 수 없습니다. 표시 한 네 줄부터 그 조인 조건과 일치해야합니다. 삽입을 시도하여 처음에 반환되는 행 수를 확인하십시오.

+0

답변 해 주셔서 감사합니다. 실제로 여기에 4 개의 행만 표시되었지만 더 많은 삽입 선이 있습니다. 그 안에 일반적인 courseID가 있습니다. 그리고 group by 절을 사용하여 Select 쿼리를 시도했고 필요에 따라 작동합니다. 쿼리는 다음과 같습니다. SELECT * FROM regcourses where regcourseID = (코스 그룹을 선택하는 csgrec = 3) GROUP BY regcourseID 하지만 업데이트에서 group by 절도 사용하고 싶습니다. 업데이트시 group by 절을 어떻게 사용할 수 있습니까? – barsan

+0

왜 'GROUP BY'가 필요한가요? 그건 너에게서 뭔가를 숨기고 있을지도 모른다. 이렇게하면 데이터베이스에 여러 행이 있더라도 select가 각 regcourseid에 대해 한 행만 반환하도록합니다. –

+0

나는 또한 귀하의 제안을 시도하고 그것은 1 행 대신 많은 출력 행을 검색하고 있습니다. 왜냐하면 csgrec 필드에는 오직 '3'만 있기 때문입니다. 하지만 여전히 많은 행이 있습니다. 그룹별로 사용하지 않고 행을 하나만 가져 오려면 어떻게해야합니까? – barsan

관련 문제