Come faccio a contrassegnare i duplicati in un determinato gruppo in MySQL?
Domanda
Ho la seguente struttura della tabella (in MySQL):
DocID, Code, IsDup, DopOf
, dove DocID
è unico.
I valori sono come:
1,AAAA,nul,nul 2,AAAA,nul,nul 3,AAAA,nul,nul 4,BBBB,nul,nul 5,CCCC,nul,nul 6,CCCC,nul,nul
Quello che voglio è quello di scrivere una procedura che può aggiornare la tabella e dare il risultato desiderato come:
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
mostra se il Doc
è duplicato o non sulla base di Code
,
e DupOf
indica il DocId
originale.
Qualcuno può aiutarmi? Sto cercando di implementare la logica, ma mi sono bloccato.
Il vostro aiuto sarebbe molto apprezzato.
Grazie.
Soluzione
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
Se la tabella è MyISAM
, si dovrebbe avere un indice su (code, docId)
.
Se la tabella è InnoDB
e docId
è un PRIMARY KEY
, si dovrebbe avere un indice su (code)
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow