2009-05-19 3 views
1

다음 표 구조 (MySQL) :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 

IsDupDoc이 중복 Code가 아닌 및 DupOf는 원본 DocId을 나타냅니다.

아무도 도와 줄 수 있습니까? 나는 논리를 구현하려고하지만 막혀있다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

3
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 

, 당신은 (code, docId)에 인덱스가 있어야합니다.

테이블이 InnoDB이고 docIdPRIMARY KEY 인 경우 (code)에 대한 인덱스가 있어야합니다.

+0

감사합니다. Quassnoi ... Ur 답변 정말 도움이됩니다. :-) –

+0

오타'WHEH'는'WHEN'을 읽어야합니다. 쿼리가 나를 위해 훌륭했습니다. 제 경우에는'u.id = p.first_id THEN NULL ELSE p.first_id END'를 사용하십시오. – codemagician