Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 14609|Válasz: 0

[Tippek] SQL Hogyan lehet lekérdezni egy táblát a duplikátumok eltávolítására

[Linket másol]
Közzétéve 2014. 10. 09. 11:03:04 | | |

SQL egy- vagy többtáblás lekérdezések távolítják el a duplikált rekordokat

Egyetlen tábla különálló

  1. select distinct 字段 from 表
Kód másolása

Sok szavazat csoportosítva

A by csoportot a Order by és limit előtt kell elhelyezni, különben hiba jelenthető

************************************************************************************

1. Keresse meg a felesleges duplikált rekordokat a táblázatban, és a duplikált rekordokat egyetlen mező (peopleId) alapján ítélik meg.

Válassz * Emberekből
ahol peopleId in (válassz emberekId-et az emberekcsoportból az emberekId-en, ha az emberek száma (emberekId) > 1)

2. Töröljük a táblázatból a redundáns duplikált rekordokat, és a duplikált rekordokat egyetlen mező (peopleId) alapján ítélik meg, így csak a legkisebb rowid rekordok maradnak
Törlés az emberekről
ahol peopleId in (válassz emberekId-et az emberekcsoportból az emberekId-en, ha az emberek száma (emberekId) > 1)
és rowid not in (min(rowid) az emberek csoportból kiválasztva az emberekId száma (peopleId) szerint>1)

3. Keress felesleges duplikált rekordokat (több mezőt) a táblázatban
Válassz * a vitae a-ból
ahol (a.peopleId,a.seq) in (válassz emberekId,seq az életrajzcsoportból népcsoportok szerint, szek, amelynek száma (*) > 1)

4. Töröld a táblázatból a redundáns duplikált rekordokat (több mezőt), így csak a legkisebb rowid rekordok maradnak
Töröld a vitae a-ból
ahol (a.peopleId,a.seq) in (válassz emberekId,seq az életrajzcsoportból népcsoportok szerint, szek, amelynek száma (*) > 1)
és rowid nem in (min(rowid) válaszd a vitae csoportból peopleId, seq with count(*)>1)


5. Keress felesleges duplikált rekordokat (több mezőt) a táblázatban, és ne tartalmazzon olyan rekordokat, amelyek a legkevésbé rosszul rendelkeznek
Válassz * a vitae a-ból
ahol (a.peopleId,a.seq) in (válassz emberekId,seq az életrajzcsoportból népcsoportok szerint, szek, amelynek száma (*) > 1)
és rowid nem in (min(rowid) válaszd a vitae csoportból peopleId, seq with count(*)>1)

(kettő)
Például
Az A táblázatban van egy "név" mező,
És a "név" értéke ugyanaz lehet a különböző rekordok között,
Most olyan tételeket kell kérni, amelyeknek duplikált "név" értékei vannak a táblázatban lévő rekordok között;
Válassz Név, Szám(*) Csoportból Név alapján, amelynek Száma (*) > 1

Ha a nem is ugyanaz, az a következő:
Válassz nevet, nemet, számot (*) a csoportból név szerint, nemi szám alapján(*) > 1

(három)
1. módszer

deklarare @max egész számot@id egész számot

cur_rows kurzort helyi kijelölni a főmező kiválasztásához, count(*) a tábla névcsoportból fő mező szerint, amelynek count(*) >; 1

Nyisd meg cur_rows

Hozd cur_rows @id,@max

míg @@fetch_status=0

Kezdeni

select @max = @max -1

Állítsd be a sorszámot @max

Töröld a tábla nevét, ahol elsődleges mező = @id

Hozd cur_rows @id,@max
vége

Közel cur_rows

Sorszám 0 beállítása

2. módszer

A "duplikált rekordoknak" két jelentése van a duplikált rekordoknak: az egyik teljesen duplikált rekord, vagyis egy olyan rekord, amelyben minden mező duplikált, a másik pedig olyan rekord, amelynek kulcsmezők részei duplikáltak, például a Név mező duplikált, míg más mezők nem feltétlenül duplikáltak vagy figyelmen kívül hagyhatók.

1. Az első ismétléstípus esetében viszonylag könnyű megoldani és használni

select distinct * from tableName

Az eredményt úgy is megkaphatod, hogy nincs ismétlődő rekord.

Ha duplikált rekordokat kell törölned (egy duplikált rekordot tartanod), akkor ezeket a következőképpen törölheted

select distinct * into #Tmp from tableName

drop table tableName

a * a tableName betűbe válassz #Tmp
Dobd le az asztalt #Tmp

Ez a duplikálás a rossz táblázattervezés miatt történik, és egyedi indexoszlopok hozzáadásával oldható meg.

2. Ez a típusú duplikált probléma általában megköveteli, hogy az első bejegyzést megőrizzük a duplikált rekordban, és a műveleti módszer a következő

Tegyük fel, hogy vannak duplikált mezők a Név és Cím, és ehhez a két mezőhöz egyedi eredményhalmazt kell kapnod

select identity(int,1,1) autoID-ként, * #Tmp a tableName

válassza ki min(autoID) autoID-ként #Tmp2 #Tmp csoportból név, autoID alapján

select * from #Tmp where autoID in (select autoID from #tmp2)

Az utolsó kiválasztás kapja a név és cím eredményhalmazát, amelyek nem ismétlődnek meg (de van egy további autoID mező, amely íráskor a select klauzulába írható)

(4)
A lekérdezések duplikálódnak

Válassz * from Tablename, ahol az ID (select ID from TableName

Csoport azonosító szerint

a count(id) > 1

)

3. Keress felesleges duplikált rekordokat (több mezőt) a táblázatban
Válassz * a vitae a-ból
ahol (a.peopleId,a.seq) in (válassz emberekId,seq az életrajzcsoportból népcsoportok szerint, szek, amelynek száma (*) > 1)

A futtatás problémákat okoz, és az írás és küldés, mint például a hely(a.peopleId, a.seq) nem működik!!






Előző:SQL tárolt eljárásokat hoz létre paraméterekkel
Következő:EPUBReader olvasó, kötelező eszköz az EPUB fájlok megnyitásához
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com