Innanzitutto, potresti provare ad aggiungere indici ai campi ProgramName e CustID se non li hai già.
Deduplicazione
Puoi raggruppare i tuoi record per identificare i duplicati e, mentre lo fai, prendi il valore ID minimo per ciascun gruppo. Quindi, elimina tutti i record il cui ID non è uno dei MinID.
Metodo nella clausola
delete from
ProgramsList
where
id not in
(select min(id) as MinID
from ProgramsList
group by ProgramName, CustID)
Metodo di adesione
Potrebbe essere necessario eseguirlo più di una volta, se ci sono molti membri per gruppo.
DELETE P
FROM ProgramsList as P
INNER JOIN
(select count(*) as Count, max(id) as MaxID
from ProgramsList
group by ProgramName, CustID) as A on A.MaxID = P.id
WHERE A.Count >= 2
Alcune persone hanno problemi di prestazioni con la clausola In-Clause, altre no. Dipende molto dai tuoi indici e simili. Se uno è troppo lento, prova l'altro.
Correlati:https://stackoverflow.com/a/4192849/127880