문제

다음 테이블 구조가 있습니다 (MySQL에는).

DocID, Code, IsDup, DopOf

, 어디 DocID 독특합니다.

값은 다음과 같습니다.

1,AAAA,nul,nul
2,AAAA,nul,nul
3,AAAA,nul,nul
4,BBBB,nul,nul
5,CCCC,nul,nul
6,CCCC,nul,nul

내가 원하는 것은 테이블을 업데이트하고 원하는 결과를 다음과 같이 제공 할 수있는 절차를 작성하는 것입니다.

1,AAAA,0,0
2,AAAA,1,1
3,AAAA,1,1
4,BBBB,0,0
5,CCCC,0,0
6,CCCC,1,5

IsDup .를 보여줍니다 Doc 중복되거나 기준으로 중복되지 않습니다 Code, 그리고 DupOf 원본을 나타냅니다 DocId.

아무도 나를 도울 수 있습니까? 나는 논리를 구현하려고 노력하고 있지만 붙어 있습니다.

당신의 도움은 크게 감사 할 것입니다.

감사.

도움이 되었습니까?

해결책

UPDATE  table t
JOIN    (
        SELECT  code, MIN(docId) AS firstdoc
        FROM    table
        GROUP BY
                code
        ) q
ON      t.code = q.code
SET     t.isDup = NOT (t.docId = q.firstdoc), 
        t.dupOf = CASE WHEH t.docId = q.firstdoc THEN 0 ELSE q.firstDoc END

당신의 테이블이 있다면 MyISAM, 당신은 색인이 있어야합니다 (code, docId).

당신의 테이블이 있다면 InnoDB 그리고 docId a PRIMARY KEY, 당신은 색인이 있어야합니다 (code).

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