Creative Saplings

Hogyan találhatok meg duplikált értékeket az SQL Serverben?

február 2, 2021
No Comments

Ebben a cikkben megtudhatja, hogyan lehet duplikált értékeket találni egy táblázatban vagy nézetben az SQL használatával. Lépésről lépésre végigmegyünk a folyamaton. Kezdünk egy egyszerű problémával, lassan építjük fel az SQL-t, amíg el nem érjük a végeredményt.

A végére megérti az ismétlődő értékek azonosításához használt mintát, és képes lesz használni az az adatbázisod.

A lecke összes példája a Microsoft SQL Server Management Studio és az AdventureWorks2012 adatbázisra épül. Ezeknek az ingyenes eszközöknek a használatát az Első lépések az SQL Server használatával című útmutatóm használatával kezdheti el.

Ismétlődő értékek keresése az SQL Server szolgáltatásban

Kezdjük. Ezt a cikket egy valós igényre alapozzuk; az emberi erőforrás menedzser szeretné, ha megtalálná az összes alkalmazottat ugyanazon a születésnapon. Szeretné, ha a lista BirthDate és EmployeeName szerint lenne rendezve.

Az adatbázis megtekintése után nyilvánvalóvá válik a HumanResources. A munkavállalói táblát kell használni, mivel tartalmazza az alkalmazottak születési dátumát.

At első pillantásra úgy tűnik, hogy elég egyszerű lenne duplikált értékeket találni az SQL szerveren. Végül is könnyen rendezhetjük az adatokat.

Ismétlődő születési dátumok

De az adatok rendezése után nehezebbé válik! Mivel az SQL halmazalapú nyelv, a kurzorok kivételével nincs egyszerű módja az előző rekord értékeinek megismerésére.

Ha ezeket ismernénk, akkor csak összehasonlíthatnánk az értékeket, és amikor azok voltak ugyanazokat a bejegyzéseket másolatokként jelölje meg.

Szerencsére van egy másik módunk is erre. BELSŐ CSATLAKOZÁST fogunk használni az alkalmazottak születésnapjainak megegyezéséhez. Ezzel megszerezzük azon alkalmazottak listáját, akik ugyanazt a születési dátumot használják.

Ez egy építkezés közbeni cikk lesz. Kezdem egy egyszerű lekérdezéssel, megmutatom az eredményeket, és rámutatok arra, hogy mit kell finomítani, és továbblépek. Kezdjük az alkalmazottak és születési dátumaik listájának összeállításával.

1. lépés – Szerezzen be egy alkalmazotti listát születési dátum szerint rendezve

Ha SQL-szel dolgozik, különösen még be nem térképezett területen, Úgy érzem, hogy jobb, ha kis lépésekben állítunk elő egy állítást, és közben ellenőrizzük az eredményeket, ahelyett, hogy egy lépésben írnám a “végső” SQL-t, hogy csak nekem kell elhárítanom.

Tipp: Ha nagyon nagy adatbázissal dolgozik, akkor érdemes lehet kisebb példányt készítenie fejlesztőként vagy tesztverzióként, és ezt felhasználhatja a kérdéseinek megírásához. Így nem fogja megölni a termelési adatbázis teljesítményét, és mindenkit lerázni te.

Tehát első lépésként az összes alkalmazottat felsoroljuk. Ehhez csatlakozunk az Alkalmazottak táblához a Személy táblához, hogy megkaphassuk az alkalmazott nevét.

Itt van az eddigi lekérdezés

SELECT E1.BusinessEntityID, P.FirstName + " " + p.LastName AS FullName, E1.BirthDateFROM HumanResources.Employee AS E1 INNER JOIN Person.Person AS P ON P.BusinessEntityID = E1.BusinessEntityIDORDER BY E1.BirthDate, FullName

Ha megnézi az eredményt, akkor látja, hogy a HR vezető kérésének minden eleme megvan, kivéve minden alkalmazottat megjelenítünk

Alkalmazotti nevek és születési dátum

A következő lépésben beállítjuk az eredményeket, hogy elkezdhessük összehasonlítani a születési dátumokat, hogy megkeresjük az ismétlődő értékeket.

2. LÉPÉS – Hasonlítsa össze a születési dátumokat a duplikátumok azonosításához.

Most, hogy van egy alkalmazotti listánk, most szükségünk van egy eszközre a születési dátumok összehasonlításához, hogy azonosíthassuk az azonos születési dátumokkal rendelkező munkavállalókat. Általában ezek ismétlődő értékek.

Az összehasonlítás elvégzéséhez önállóan csatlakozunk az alkalmazottak asztalához. Az öncsatlakozás csak a BELSŐ CSATLAKOZÁS egyszerűsített változata. Először a BirthDate-et használjuk csatlakozási feltételként. Ez biztosítja, hogy csak azonos születési dátummal rendelkező munkavállalókat kapjunk be.

SELECT E1.BusinessEntityID, E2.BusinessEntityID, P.FirstName + " " + p.LastName AS FullName, E1.BirthDateFROM HumanResources.Employee AS E1 INNER JOIN Person.Person AS P ON P.BusinessEntityID = E1.BusinessEntityID INNER JOIN HumanResources.Employee AS E2 ON E2.BirthDate = E1.BirthDateORDER BY E1.BirthDate, FullName

Hozzáadtam az E2.BusinessEntityID azonosítót a lekérdezéshez, hogy összehasonlíthassa mindkettő elsődleges kulcsát. E1 és E2. Sok esetben azt látja, hogy azonosak.

A BusinessEntityID-re összpontosítunk, mert ez az elsődleges kulcs és a tábla egyedi azonosítója. Nagyon tömör és kényelmes eszközzé válik a sor eredményeinek azonosítására és a forrás megértésére.

Közelebb állunk a végeredmény megszerzéséhez, de miután megnézte az eredményeket, látni fogja, hogy ” újra megszerzi ugyanazt a rekordot mind az E1, mind az E2 mérkőzésen.

Nézze meg a pirossal karikázott elemeket. Ezeket a hamis pozitívumokat ki kell küszöbölnünk eredményeinkből. Ezek ugyanazok a sorok felelnek meg maguknak.

A jó hír az, hogy valóban közel állunk a másolatok azonosításához.

Kék színben karikáztam be a 100% -ban garantált másolatot. Figyelje meg, hogy a BusinessEntityID azonosak. Ez azt jelzi, hogy az öncsatlakozás megfelel a BirthDate-nek a különböző sorokban – az igaz duplikátumok.

Azonosított, de hamis pozitív tartalmú duplikátok

A következő lépésben ezeket a hamis pozitívumokat vesszük figyelembe, és eltávolítjuk az eredményeinkből.

3. lépés – Az egyező sorok egyezésének kiküszöbölése – a hamis pozitív adatok eltávolítása

Az előző lépésben észrevehette, hogy az összes hamis pozitív egyezésnek ugyanaz a BusinessEntityID azonosítója; mivel az igazi duplikátumok nem voltak egyenlőek.

Ez a mi nagy célunk.

Ha csak duplikátumokat akarunk látni, akkor csak a csatlakozásból kell visszahoznunk a mérkőzéseket, ahol a A BusinessEntityID értékek nem egyenlőek.

Ehhez hozzáadhatunk

E2.BusinessEntityID <> E1.BusinessEntityID

Csatlakozási feltételként az öncsatlakozáshoz. Pirosan színeztem a hozzáadott feltételt.

SELECT E1.BusinessEntityID, E2.BusinessEntityID, P.FirstName + " " + p.LastName AS FullName, E1.BirthDateFROM HumanResources.Employee AS E1 INNER JOIN Person.Person AS P ON P.BusinessEntityID = E1.BusinessEntityID INNER JOIN HumanResources.Employee AS E2 ON E2.BirthDate = E1.BirthDate AND E2.BusinessEntityID <> E1.BusinessEntityIDORDER BY E1.BirthDate, FullName

A lekérdezés futtatása után kevesebb eredmény jelenik meg a találatok között, valóban duplikátumok.

Eltávolított hamis pozitív pozitív másolatok

Mivel ez üzleti kérés volt, tisztítsuk meg a lekérdezést, hogy csak a kért információkat jelenítsük meg.

4. lépés – Utolsó simítások

Nézzük megszabaduljon a BusinessEntityID értékeitől a lekérdezésből. Csak azért voltak, hogy segítsenek nekünk a hibaelhárításban.

A végső lekérdezés itt található.

SELECT P.FirstName + " " + p.LastName AS FullName, E1.BirthDateFROM HumanResources.Employee AS E1 INNER JOIN Person.Person AS P ON P.BusinessEntityID = E1.BusinessEntityID INNER JOIN HumanResources.Employee AS E2 ON E2.BirthDate = E1.BirthDate AND E2.BusinessEntityID <> E1.BusinessEntityIDORDER BY E1.BirthDate, FullName

És itt láthatja az eredményeket a HR menedzser!

Bemutatható eredmények

Mark, az egyik olvasóm, rámutatott, hogy ha van három alkalmazott, akiknek azonos a születési dátuma, akkor a végeredményben duplikátumok lennének. Ezt igazoltam, és ez igaz. Ha vissza akar adni egy listát, amely minden duplikátumot csak egyszer mutat be, használhatja a DISTINCT záradékot. Ez a lekérdezés minden esetben működik:

SELECT DISTINCT P.FirstName + " " + p.LastName AS FullName, E1.BirthDateFROM HumanResources.Employee AS E1 INNER JOIN Person.Person AS P ON P.BusinessEntityID = E1.BusinessEntityID INNER JOIN HumanResources.Employee AS E2 ON E2.BirthDate = E1.BirthDate AND E2.BusinessEntityID <> E1.BusinessEntityIDORDER BY E1.BirthDate, FullName

Végső megjegyzések

Összefoglalva az alábbiakban ismertetjük azokat a lépéseket, amelyeket a táblázatban lévő ismétlődő adatok azonosításához tettünk. .

  1. Először létrehoztunk egy lekérdezést a megtekinteni kívánt adatokról. Példánkban ez volt az alkalmazott és a születési dátumuk.
  2. Önálló csatlakozást hajtottunk végre, INNER JOIN egyazon asztalon, geek beszédben, és a mezőt megismételtnek tekintettük. Esetünkben duplikált születésnapokat akartunk találni.
  3. Végül kiküszöböltük az azonos sorba tartozó egyezéseket, kizárva azokat a sorokat, ahol az elsődleges kulcsok megegyeztek.

A lépésről lépésre láthatja, hogy rengeteg találgatást vettünk igénybe a lekérdezés létrehozásakor.

Ha javítani szeretne a lekérdezések megírásán, vagy csak összezavarja az egész, és a köd megtisztításának módja, akkor javasolhatom az Útmutatót a három lépés a jobb SQL-hez

Articles
Previous Post

Csíraelmélet

Next Post

Társadalombiztosítás (Magyar)

Vélemény, hozzászólás? Kilépés a válaszból

Legutóbbi bejegyzések

  • A világ legjobb fotóiskolái, 2020
  • A szuverén polgárok kormányellenes filozófiájukat viszik az utakra
  • Stukkó javítási költség útmutató
  • Muckrakers (Magyar)
  • Precíziós onkológia

Archívum

  • 2021 február
  • 2021 január
  • 2020 december
  • 2020 november
  • 2020 október
  • 2020 szeptember
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.