SQLShack (Română)

Acest articol explică procesul de efectuare a activității de ștergere SQL pentru rândurile duplicate dintr-un tabel SQL.

Introducere

Ar trebui să urmăm anumite bune practici în timp ce proiectăm obiecte în SQL Server. De exemplu, un tabel ar trebui să aibă chei primare, coloane de identitate, indexuri grupați și non-grupați, constrângeri pentru a asigura integritatea și performanța datelor. Chiar și noi urmăm cele mai bune practici și s-ar putea să ne confruntăm cu probleme precum rândurile duplicate. S-ar putea să obținem aceste date și în tabele intermediare în importul de date și dorim să eliminăm rândurile duplicate înainte de a le insera efectiv în tabelele de producție.

Să presupunem că tabelul SQL conține rânduri duplicate și doriți să eliminați aceste rânduri duplicate . De multe ori, ne confruntăm cu aceste probleme. Este o bună practică, de asemenea, să folosiți cheile relevante, constrângeri pentru a elimina posibilitatea duplicării rândurilor, totuși, dacă avem rânduri duplicate deja în tabel. Trebuie să urmăm metode specifice pentru a curăța datele duplicate. Acest articol explorează diferitele metode pentru a elimina datele duplicate din tabelul SQL.

Să creăm un exemplu de tabel pentru angajați și să inserăm câteva înregistrări în acesta.

În tabel, avem puține înregistrări duplicate și trebuie să le eliminăm.

SQL șterge rânduri duplicate folosind Group By și având clauză

În această metodă, folosim clauza SQL GROUP BY pentru a identifica duplicatul rânduri. Clauza Group By grupează datele conform coloanelor definite și putem folosi funcția COUNT pentru a verifica apariția unui rând.

De exemplu, executați următoarea interogare și obținem acele înregistrări cu apariție mai mare de 1 în tabelul Angajaților.

În rezultatul de mai sus, avem două înregistrări duplicate cu ID 1 și 3.

  • Emp ID 1 are două apariții în tabelul Angajaților
  • Emp ID 3 are trei apariții în tabelul Angajaților

Trebuie să păstrăm un singur rând și eliminați rândurile duplicate. Trebuie să eliminăm din tabel doar rândurile duplicate. De exemplu, EmpID 1 apare de două ori în tabel. Vrem să eliminăm o singură apariție.

Folosim funcția SQL MAX pentru a calcula id-ul maxim al fiecărui rând de date.

În următoarea captură de ecran, putem vedea că declarația Select de mai sus exclude ID-ul maxim al fiecărui rând duplicat și obținem doar valoarea minimă a ID-ului.

Pentru a elimina aceste date, înlocuiți mai întâi Selectați cu instrucțiunea de ștergere SQL conform următoarei interogări.

După ce executați declarația de ștergere, efectuați o selecție pe o tabelă a angajaților și obținem următoarele înregistrări care nu conțin rânduri duplicate.

SQL șterge rânduri duplicat folosind Common Table Expressions (CTE)

Putem folosi Common Table Expressions cunoscute sub numele de CTE pentru a elimina rândurile duplicate din SQL Server. Este disponibil începând cu SQL Server 2005.

Folosim o funcție SQL ROW_NUMBER și adaugă un număr de rând secvențial unic pentru rând.

În următorul CTE, partiționează date folosind clauza PARTITION BY pentru coloana și și generează un număr de rând pentru fiecare rând.

În ieșire, dacă vreun rând are valoarea coloanei mai mare de 1, arată că este un duplicat rând.

Putem elimina rândurile duplicate folosind următorul CTE.

Elimină rândurile având valoarea mai mare de 1

Funcția RANK pentru a șterge rândurile duplicate SQL

Putem folosi funcția SQL RANK pentru a elimina și rândurile duplicate. Funcția SQL RANK oferă un ID de rând unic pentru fiecare rând, indiferent de rândul duplicat.

În următoarea interogare, folosim o funcție RANK cu clauza PARTITION BY. Clauza PARTITION BY pregătește un subset de date pentru coloanele specificate și oferă rang pentru acea partiție.

În captura de ecran, puteți observa că trebuie să eliminăm rândul cu rang mai mare decât unul. Să eliminăm aceste rânduri folosind următoarea interogare.

Utilizați pachetul SSIS pentru a șterge SQL rânduri duplicate

Serviciul de integrare SQL Server oferă diverse transformări, operatori care ajută atât administratorii, cât și dezvoltatorii să reducă efortul manual și optimizați sarcinile. Pachetul SSIS poate elimina rândurile duplicate dintr-un tabel SQL.

Utilizați operatorul de sortare într-un pachet SSIS pentru eliminarea rândurilor duplicate

Putem folosi un operator de sortare pentru a sorta valorile în un tabel SQL. S-ar putea să întrebați cum sortarea datelor poate elimina rândurile duplicate?

Să creăm pachetul SSIS pentru a afișa această sarcină.

  • În SQL Server Data Tools, creați un nou pachet de integrare.În noul pachet, adăugați o conexiune sursă OLE DB
  • Deschideți editorul sursă OLE DB și configurați conexiunea sursă și selectați tabelul de destinație

  • Faceți clic pe Previzualizați datele și puteți vedea că avem în continuare date duplicate în tabelul sursă

  • Adăugați un operator Sortare din caseta de instrumente SSIS pentru operațiunea de ștergere SQL și asociați-l cu datele sursă

Pentru configurarea operatorului Sortare, faceți dublu clic pe acesta și selectați coloanele care conțin valori duplicate. În cazul nostru, valoarea duplicat este în,, coloane.

Putem folosi și tipurile de sortare crescătoare sau descendentă pentru coloane. Metoda de sortare implicită este ascendentă. În ordinea de sortare, putem alege ordinea de sortare a coloanei. Ordinea de sortare 1 arată coloana care va fi sortată mai întâi.

În partea stângă jos, bifați o casetă de selectare Eliminați rândurile cu valori de sortare duplicat.

Va îndeplini sarcina de a elimina rândurile duplicate pentru noi din datele sursă. Să bifăm această casetă de selectare și să facem clic pe OK. Realizează activitatea de ștergere SQL din pachetul SSIS.

Odată ce facem clic pe OK, revine la fila fluxului de date, și putem vedea următorul pachet SSIS.

Putem adăuga destinații SQL Server pentru a stoca datele după eliminarea rândurilor duplicate. Vrem doar să verificăm dacă operatorul de sortare face sarcina pentru noi sau nu.

Adăugați o transformare SQL Multicast din caseta de instrumente SSIS așa cum se arată mai jos.

Pentru a vizualiza datele distincte, faceți clic dreapta pe conectorul dintre Sortare și Multicast. Faceți clic pe Activați vizualizatorul de date.

Pachetul SSIS general arată ca mai jos.

Executați pachetul pentru a efectua operația de ștergere SQL. Se deschide Sortarea vizualizatorului de date de ieșire la activitatea Flux de date. În acest vizualizator de date, puteți vedea date distincte după eliminarea valorilor duplicate.

Închideți acest lucru și pachetul SSIS se afișează cu succes executat.

Concluzie

În acest articol, am explorat procesul de ștergere a rândurilor duplicate SQL folosind diferite moduri, cum ar fi pachetul T-SQL, CTE și SSIS. Puteți folosi metoda în care vă simțiți confortabil. Cu toate acestea, aș sugera să nu implementați direct aceste proceduri și să împachetați datele de producție. Ar trebui să testați într-un mediu inferior.

  • Autor
  • Postări recente
În calitate de trainer certificat MCSA și certificat Microsoft în Gurgaon, India, cu o experiență de 13 ani, Rajendra lucrează pentru o varietate de companii mari concentrându-se pe optimizarea performanței, monitorizarea, disponibilitatea ridicată și strategiile și implementarea recuperării în caz de dezastru. Este autorul a sute de articole de autoritate despre SQL Server, Azure, MySQL, Linux, Power BI, Tuning de performanță, AWS / Amazon RDS, Git și tehnologii conexe care au fost vizualizate de peste 10 milioane de cititori până în prezent.
El este creatorul uneia dintre cele mai mari colecții online gratuite de articole pe un singur subiect, cu seria sa de 50 de părți despre SQL Server Always On Availability Groups. Pe baza contribuției sale la comunitatea SQL Server, a fost recunoscut cu diverse premii, inclusiv prestigiosul „Cel mai bun autor al anului” continuu în 2020 și 2021 la SQLShack.
Raj este mereu interesat de noi provocări, deci dacă aveți nevoie de consultanță ajutor cu privire la orice subiect acoperit în scrierile sale, el poate fi contactat la [email protected]
Vezi toate mesajele lui Rajendra Gupta

Ultimele postări ale lui Rajendra Gupta (vezi toate)
  • Efectuarea actualizărilor versiunilor minore și majore pentru AWS RDS SQL Server – 29 ianuarie 2021
  • Implementarea instanțelor AWS RDS PostgreSQL – 27 ianuarie 2021
  • Migrarea bazelor de date SQL locale la AWS RDS SQL Server utilizând AWS DMS – 25 ianuarie , 2021

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *