Как пометить дубликаты в данной группе в MySQL? - PullRequest
1 голос
/ 19 мая 2009

У меня есть следующая структура таблицы (в 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.

Кто-нибудь может мне помочь? Я пытаюсь реализовать логику, но я застрял.

Ваша помощь будет высоко оценена.

Спасибо.

1 Ответ

3 голосов
/ 19 мая 2009
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 - PRIMARY KEY, у вас должен быть индекс (code).

...