|
SQL enojne/večtabelne poizvedbe odstranijo podvojene zapise Enotna tabela različna - select distinct 字段 from 表
Kopiraj kodo
Veliko glasov je združenih po Skupina z mora biti postavljena pred vrstni red od in limit, sicer bo napaka prijavljena ************************************************************************************ 1. Poišči podvojene zapise v tabeli, podvojene zapise pa ocenjujemo na podlagi enega polja (peopleId). Izberi * med ljudmi kjer peopleId v (izberi peopleId iz skupine peopleId po peopleId z count(peopleId) > 1) 2. Izbrišite podvojene zapise v tabeli, podvojeni zapisi pa se ocenjujejo na podlagi enega samega polja (peopleId), pri čemer ostanejo le zapisi z najmanjšim rowidom izbrisati iz ljudi kjer peopleId v (izberi peopleId iz skupine peopleId po peopleId z count(peopleId) > 1) in rowid ni v (izberi min(rowid) iz skupine ljudi po peopleId ima count(peopleId )>1) 3. Poiščite podvojene zapise (več polj) v tabeli Izberite * iz vitae a kjer (a.peopleId,a.seq) v (izberi peopleId,seq iz skupine življenjepisov po peopleId,seq z count(*) > 1) 4. Izbrisati odvečne podvojene zapise (več polj) v tabeli, pri čemer ostanejo le zapisi z najmanjšim rowidom Delete from Vitae A kjer (a.peopleId,a.seq) v (izberi peopleId,seq iz skupine življenjepisov po peopleId,seq z count(*) > 1) in rowid, ki ni v (select min(rowid) iz skupine vitae z peopleId,seq, ki ima count(*)>1) 5. Najdi podvojene zapise (več polj) v tabeli in ne vsebuje zapisov z najmanjšim rowidom Izberite * iz vitae a kjer (a.peopleId,a.seq) v (izberi peopleId,seq iz skupine življenjepisov po peopleId,seq z count(*) > 1) in rowid, ki ni v (select min(rowid) iz skupine vitae z peopleId,seq, ki ima count(*)>1)
(dva) Na primer V tabeli A je polje "ime", In vrednost "imena" je lahko enaka med različnimi zapisi, Zdaj morate poizvedovati za elemente z podvojenimi vrednostmi "imena" med zapisi v tabeli; Izberite ime,count(*) iz skupine po imenu z Count(*) > 1 Če je spol tudi enak, je naslednji: Izberite ime, spol, štetje(*) iz skupine po imenu, spol s številom(*) > 1 (tri) Metoda 1 declare @max celo število,@id celo število razglasimo cur_rows lokalni kazalec za izbrano glavno polje, count(*) iz skupine imen tabele po glavnem polju, ki ima count(*) >; 1 Odpri cur_rows prinesi cur_rows v @id,@max medtem ko @@fetch_status=0 začetek select @max = @max -1 Nastavi število vrstic @max izbriši iz imena tabele, kjer primarno polje = @id prinesi cur_rows v @id,@max konec Close cur_rows nastavi število vrstic 0 Metoda 2 "Podvojeni zapisi" imajo dva pomena podvojenih zapisov: eden je popolnoma podvojen zapis, torej zapis z vsemi polji podvojenimi, drugi pa je zapis z podvojenimi deli ključnih polj, na primer polje Ime je podvojeno, medtem ko druga polja niso nujno podvojena ali jih je mogoče ignorirati. 1. Za prvo vrsto ponavljanja je razmeroma enostavno rešiti in uporabiti izberite distinct * from tableName Rezultat lahko dobite brez podvojenih zapisov. Če morate izbrisati podvojene zapise (obdržati en podvojeni zapis), jih lahko izbrišete na naslednji način izberi distinct * v #Tmp iz tableName tabela za izpustitev tabele Ime izberite * v tableName iz #Tmp Drop tabela #Tmp To podvajanje nastane zaradi slabe zasnove tabele in ga je mogoče rešiti z dodajanjem edinstvenih indeksnih stolpcev. 2. Ta vrsta problema podvajanja običajno zahteva shranjevanje prvega zapisa v podvojenem zapisu, metoda delovanja pa je naslednja Predpostavimo, da obstajajo podvojena polja Ime in Naslov, in potrebujemo edinstven nabor rezultatov za ti dve polji izberite identiteto(int,1,1) kot samodejni ID, * v #Tmp iz tableName izberite min(autoID) kot autoID v #Tmp2 iz #Tmp skupine po Name,autoID izberite * iz #Tmp, kjer je samodejna identifikacija (izberite samodejno identifikacijo iz #tmp2) Zadnja izbira dobi niz rezultatov Ime in Naslov, ki se ne ponavljata (vendar obstaja dodatno polje autoID, ki ga je mogoče zapisati v klavzulo za izbiro med pisanjem) (4) Poizvedbe so podvojene Izberite * iz TableName kjer je id v (Izberite ID iz TableName Skupina po ID ima count(id) > 1 ) 3. Poiščite podvojene zapise (več polj) v tabeli Izberite * iz vitae a kjer (a.peopleId,a.seq) v (izberi peopleId,seq iz skupine življenjepisov po peopleId,seq z count(*) > 1) Tek povzroča težave, pisanje in pošiljanje kot je (a.peopleId, a.seq) pa ne bo delovalo!!
|