|
SQL vienos / kelių lentelių užklausos pašalina pasikartojančius įrašus Atskira viena lentelė - 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!
|