none
Delete duplicati con inner join RRS feed

  • Domanda

  • Ciao a tutti,

    avrei la necessità di eliminare da una tabella dei duplicati
    La tabella ha questa struttura

    Id, DocumentId, PartageId, EstActif, CreationDate, ModificationDate, PartageDate, EstFormatPdf

    Io vorrei trovare tutti i duplicati per DocumentId, PartageId.

    Per fare questo avrei usato questa select

     WITH TempTab1
    AS
    (
    SELECT DocumentId,PartageId, ROW_NUMBER() OVER(PARTITION by  DocumentId,PartageId ORDER BY Id ) 
    AS duplicateRecCount
    FROM dbo.AccesDocument
    )
    select * from TempTab1  where duplicateRecCount > 1

    dunque 

    DELETE FROM TempTab1 WHERE duplicateRecCount > 1;

    Il mio problema e che ho una tabella correlata che si chiama HistoriqueDocument con questi campi

    Id, DocumentId, Date, TypeActionHistoriqueId, ProfilId, Data

    e correlata da campo DocumentId

    quello che vorrei fare é cancellare il duplicato dalla tabella AccesDocument che abbia pero il record in HistoriqueDocument con la Date più vecchia
    Quindi deve restare il duplicato AccesDocument più nuovo

    Per cancellare AccesDocument  devo pero anche cancellare tutti i record in HistoriqueDocument  quindi prima basandomi sulla select con join precedente eliminare tutti i record in HistoriqueDocument   con stesso idDocument

    Potete darmi qualche suggerimento?

    Grazie


    http://www.fuossbook.it

    mercoledì 24 luglio 2019 09:28

Tutte le risposte

  • Considerato che stai cancellando dei dati, io prima creerei una query che mi restituisce gli ID da cancellare, poi passerei gli ID alla delete per cancellare solo quel che serve.

    Ho fatto moltissime Update con le JOIN ma nessuna Delete però facendo un test ho visto che funzionano in modo equivalente.

    Ribadendo che prima di fare una Delete in JOIN io ci penserei più volte ti scrivo un esempio di come va scritta la JOIN su questo tipo di query.

    DELETE FROM mov
    	FROM
    	MyTable mov
    	LEFT OUTER JOIN
    	RowsTable rov
    	ON
    	mov.Code = rov.code
    	WHERE
    	rov.id = 1

    Per quel che riguarda la cancellazione delle righe dipendenti prima della cancellazione della riga primaria,

    devi eseguire 2 scripts, cancellando prima le righe dipendenti e poi le righe principali.



    Sabrina C. - http://www.dotnetwork.it

    giovedì 25 luglio 2019 10:26