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
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)
.
제휴하지 않습니다 StackOverflow