문제

나는 테이블의 전체 추적 데이터에 대한 구체적 과정,과목번호 6.

지금은 새로운 추가로 추적 데이터를 위한 과정 번호 11.

각 행의 데이터는 한 사용자를 위한 하나의 과정,그래서 그 사용자를 위해 할당하는 물 6 물론 11 두 개의 행이 있습니다.

클라이언트가 원하는 모든 사용자를 완료한 코스 번호 6 후 언제든지 월 1 일 2008 도가 완성된 course11.그러나 나는 할 수 없으로 변환 6~11 을 유지하기를 원하기 때문에 그들의 오래된 데이터에 대한 코스 6.

그래서에 대한 모든 행하는 과목번호의 6,으로 표시되어 완료하고,보다 큰 날짜 월 1 일,2008 년을 쓰고 싶은 완료를 통해 데이터를 포함하는 행 추적 course11 는 특정 사용자.

야 할 필요가있을 수행을 통해 데이터에서는 물론 6 행 11 행도록 같은 것들을 사용자 점수와의 날짜 게시 완료를 위로 이동.

여기에 구조의 테이블:

userID (int)
courseID (int)
course (bit)
bookmark (varchar(100))
course_date (datetime)
posttest (bit)
post_attempts (int)
post_score (float)
post_date (datetime)
complete (bit)
complete_date (datetime)
exempted (bit)
exempted_date (datetime)
exempted_reason (int)
emailSent (bit)

어떤 값은 NULL 이 될 수 있는 userID/courseID 분명히지 않을 수행으로 이미 오셨습니다.

도움이 되었습니까?

해결책

어쩌면 문제를 잘못 읽었을 수도 있지만, 이미 코스 11 레코드를 삽입했으며 코스 6의 데이터와 함께 나열된 기준을 충족하는 것들을 업데이트해야한다고 생각합니다.

이 경우를 사용하면 사용하고 싶을 것입니다. UPDATE...FROM 성명:

UPDATE MyTable
SET
    complete = 1,
    complete_date = newdata.complete_date,
    post_score = newdata.post_score
FROM
    (
    SELECT
        userID,
        complete_date,
        post_score
    FROM MyTable
    WHERE
        courseID = 6
        AND complete = 1
        AND complete_date > '8/1/2008'
    ) newdata
WHERE
    CourseID = 11
    AND userID = newdata.userID

자세한 내용은이 관련 질문을 참조하십시오

다른 팁

UPDATE c11
SET
    c11.completed= c6.completed,
    c11.complete_date = c6.complete_date,
-- rest of columns to be copied
FROM courses c11 inner join courses c6 on
    c11.userID = c6.userID 
    and c11.courseID = 11 and c6.courseID = 6
     -- and any other checks

나는 항상 정상적인 선택 중 하나와 같이 업데이트의 From Clause를 항상 보았습니다. 실제로 업데이트를 실행하기 전에 업데이트 될 내용을 확인하려면 업데이트 부품을 SELECT C11로 교체 할 수 있습니다.*. 절름발이 오리의 대답에 대한 내 의견을보십시오.

값을 복사 중 하나에서 행하는 모든 다른 자격을 갖춘 행 내에서 동일한 테이블(또는 다른 테이블):

UPDATE `your_table` t1, `your_table` t2
SET t1.your_field = t2.your_field
WHERE t1.other_field = some_condition
AND t1.another_field = another_condition
AND t2.source_id = 'explicit_value'

시작으로싱 테이블으로 2 개의 독특한 참조는 그래서 SQL server 그들에게 말할 수 있는 떨어져

다음으로,지정한 분야(s)를 복사합니다.

지막으로,지정 조건에 관한 선택의 행

에 따라 조건을 복사할 수 있습니다 하나에서 행하시리즈,또는 당신에 복사할 수 있는 시리즈 시리즈입니다.을 지정할 수도 있습니다 다른 테이블,그리고 당신이 사용할 수 있습니 하위를 선택하거나 결합을 사용하도록 허용 기타 테이블을 제어하는 관계입니다.

선택을 사용하여 레코드를 삽입하십시오

INSERT tracking (userID, courseID, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent) 
SELECT userID, 11, course, bookmark, course_date, posttest, post_attempts, post_score, post_date, complete, complete_date, exempted, exempted_date, exempted_reason, emailSent
FROM tracking WHERE courseID = 6 AND course_date > '08-01-2008'

이 시도:

UPDATE barang
SET ID FROM(SELECT tblkatalog.tblkatalog_id FROM tblkatalog 
WHERE tblkatalog.tblkatalog_nomor = barang.NO_CAT) WHERE barang.NO_CAT <>'';

이것은 전체 기록을 대처하는 데 적합합니다.

UPDATE your_table
SET new_field = sourse_field
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top