Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 14609|Atsakyti: 0

[Patarimai] SQL Kaip pateikti užklausą lentelėje, kad būtų pašalinti dublikatai

[Kopijuoti nuorodą]
Paskelbta 2014-10-09 11:03:04 | | |

SQL vienos / kelių lentelių užklausos pašalina pasikartojančius įrašus

Atskira viena lentelė

  1. select distinct 字段 from 表
Kopijuoti kodą

Daugelis balsų yra sugrupuoti pagal

grupuoti pagal turi būti pateikta prieš užsakymą ir limitą, kitaip bus pranešta apie klaidą

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

1. Lentelėje raskite perteklinius pasikartojančius įrašus, o pasikartojantys įrašai bus vertinami pagal vieną lauką (peopleId).

Pasirinkite * iš žmonių
kur peopleId (pasirinkite peopleId iš žmonių grupės pagal peopleId turintys count(peopleId) > 1)

2. Panaikinkite perteklinius pasikartojančius įrašus lentelėje, o pasikartojantys įrašai bus vertinami pagal vieną lauką (peopleId), paliekant tik įrašus su mažiausiu eilutės ID
Naikinti iš žmonių
kur peopleId (pasirinkite peopleId iš žmonių grupės pagal peopleId turintys count(peopleId) > 1)
ir rowid ne (pasirinkite min(rowid) iš žmonių grupės pagal peopleId turintys count(peopleId )>1)

3. Lentelėje raskite nereikalingus pasikartojančius įrašus (kelis laukus)
Pasirinkite * iš gyvenimo aprašymo A
where (a.peopleId,a.seq) in (pasirinkite peopleId,seq iš vitae grupės pagal peopleId,seq turintys count(*) > 1)

4. Ištrinkite perteklinius pasikartojančius įrašus (kelis laukus) lentelėje, palikdami tik įrašus su mažiausiu eilutės ID
Ištrinti iš gyvenimo aprašymo A
where (a.peopleId,a.seq) in (pasirinkite peopleId,seq iš vitae grupės pagal peopleId,seq turintys count(*) > 1)
ir rowid ne (pasirinkite min(rowid) iš vitae grupės pagal peopleId,seq turintys count(*)>1)


5. Lentelėje raskite perteklinių pasikartojančių įrašų (kelių laukų) ir juose nėra įrašų su mažiausiu eilutės ID
Pasirinkite * iš gyvenimo aprašymo A
where (a.peopleId,a.seq) in (pasirinkite peopleId,seq iš vitae grupės pagal peopleId,seq turintys count(*) > 1)
ir rowid ne (pasirinkite min(rowid) iš vitae grupės pagal peopleId,seq turintys count(*)>1)

(du)
Pavyzdžiui
A lentelėje yra laukas "pavadinimas",
O "name" reikšmė gali būti vienoda skirtinguose įrašuose,
Dabar turite užklausti elementų su pasikartojančiomis "pavadinimo" reikšmėmis tarp lentelės įrašų;
Pasirinkite pavadinimą,Skaičius(*) iš grupės pagal pavadinimą, kurio skaičius (*) > 1

Jei lytis taip pat yra ta pati, ji yra tokia:
Pasirinkite vardą, lytį, skaičių (*) iš grupės pagal vardą, lytį turintys skaičių (*) > 1

(trys)
1 metodas

deklaruoti @max sveikąjį skaičių,@id sveikąjį skaičių

deklaruoti cur_rows žymeklį vietiniu pasirinkti pagrindinį lauką, count(*) iš lentelės pavadinimo grupuoti pagal pagrindinį lauką, turintį count(*) >; 1

Atidarykite cur_rows

atnešti cur_rows į @id @max

o @@fetch_status=0

Pradėti

Pasirinkite @max = @max -1

Nustatykite eilučių skaičių @max

Naikinti iš lentelės pavadinimo, kur pirminis laukas = @id

atnešti cur_rows į @id @max
pabaiga

uždaryti cur_rows

Nustatyti eilučių skaičių 0

2 metodas

"Pasikartojantys įrašai" turi dvi pasikartojančių įrašų reikšmes: viena yra visiškai pasikartojantis įrašas, t. y. įrašas, kuriame visi laukai dubliuojami, o kita yra įrašas su pasikartojančiomis pagrindinių laukų dalimis, pvz., laukas Pavadinimas yra dubliuojamas, o kiti laukai nebūtinai yra dubliuojami arba jų galima nepaisyti.

1. Pirmojo tipo pakartojimą gana lengva išspręsti ir naudoti

pasirinkti atskirą * iš lentelėsName

Galite gauti rezultatų rinkinį be pasikartojančių įrašų.

Jei reikia panaikinti pasikartojančius įrašus (išsaugoti 1 įrašo dublikatą), galite juos panaikinti taip:

Pasirinkite atskirą * į #Tmp iš lentelėsName

numesti lentelės lentelės pavadinimą

pasirinkite * į lentelęPavadinimas iš #Tmp
Numesti lentelės #Tmp

Šis dubliavimas atsiranda dėl prasto lentelės dizaino ir gali būti išspręstas pridedant unikalius indekso stulpelius.

2. Šio tipo dublikatų problema paprastai reikalauja, kad būtų išsaugotas pirmasis įrašo dublikatas, o operacijos metodas yra toks

Tarkime, kad yra pasikartojančių vardo ir adreso laukų ir turite gauti unikalų šių dviejų laukų rezultatų rinkinį

pasirinkite identity(int,1,1) kaip autoID, * į #Tmp iš tableName

pasirinkite min(autoID) kaip autoID į #Tmp2 iš #Tmp grupės pagal pavadinimą,autoID

pasirinkite * iš #Tmp, kur įjungtas autoID(pasirinkite autoID iš #tmp2)

Paskutinis pasirinkimas gauna rezultatų rinkinį Vardas ir Adresas, kurie nekartojami (tačiau yra papildomas automatinio ID laukas, kurį galima įrašyti į pasirinkimo sąlygą rašant)

(4)
Užklausos dubliuojamos

Pasirinkite * iš lentelėspavadinimas, kur id (pasirinkite ID iš lentelės pavadinimo

Grupuoti pagal ID

turintis count(id) > 1

)

3. Lentelėje raskite nereikalingus pasikartojančius įrašus (kelis laukus)
Pasirinkite * iš gyvenimo aprašymo A
where (a.peopleId,a.seq) in (pasirinkite peopleId,seq iš vitae grupės pagal peopleId,seq turintys count(*) > 1)

Veikia sukels problemų, ir rašymas ir siuntimas kaip where(a.peopleId, a.seq) neveiks!






Ankstesnis:SQL sukuria saugomas procedūras su parametrais
Kitą:EPUBReader skaitytuvas, būtinas norint atidaryti EPUB failus
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com