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.

È stato utile?

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
scroll top