|
SQL vienas/vairāku tabulu vaicājumi noņem ierakstu dublikātus Viena tabula atšķirīga - select distinct 字段 from 表
Kopēt kodu
Daudzas balsis ir grupētas pēc grupēt pēc ir jāievieto pirms pasūtījuma un ierobežojuma, pretējā gadījumā tiks ziņots par kļūdu ************************************************************************************ 1. Tabulā atrodiet liekos ierakstu dublikātus, un ierakstu dublikāti tiek vērtēti, pamatojoties uz vienu lauku (peopleId). Atlasīt * no personām kur peopleId (atlasiet peopleId no personu grupas pēc peopleId ar count(peopleId) > 1) 2. Izdzēsiet liekos ierakstu dublikātus tabulā, un ierakstu dublikāti tiek vērtēti, pamatojoties uz vienu lauku (peopleId), atstājot tikai ierakstus ar mazāko rindas ID Dzēst no lietotnes Personas kur peopleId (atlasiet peopleId no personu grupas pēc peopleId ar count(peopleId) > 1) un rowid nav (atlasiet min(rowid) no personu grupas pēc peopleId ar count(peopleId )>1) 3. Atrodiet liekus ierakstu dublikātus (vairākus laukus) tabulā Izvēlieties * no Vitae A kur (a.peopleId,a.seq) (atlasiet peopleId,seq no vitae grupas pēc peopleId,seq having count(*) > 1) 4. Izdzēsiet liekos ierakstu dublikātus (vairākus laukus) tabulā, atstājot tikai ierakstus ar mazāko rindas ID Svītrot no Vitae A kur (a.peopleId,a.seq) (atlasiet peopleId,seq no vitae grupas pēc peopleId,seq having count(*) > 1) un rowid nav (izvēlieties min(rowid) no vitae grupas pēc peopleId,seq having count(*)>1) 5. Atrodiet liekus ierakstu dublikātus (vairākus laukus) tabulā, un tajos nav ierakstu ar vismazāko rindas ID Izvēlieties * no Vitae A kur (a.peopleId,a.seq) (atlasiet peopleId,seq no vitae grupas pēc peopleId,seq having count(*) > 1) un rowid nav (izvēlieties min(rowid) no vitae grupas pēc peopleId,seq having count(*)>1)
(divi) Piemēram A tabulā ir lauks "nosaukums", Un "name" vērtība dažādos ierakstos var būt vienāda, Tagad jums ir jāvaicā vienumi ar dublikātiem "nosaukuma" vērtībām starp tabulas ierakstiem; Izvēlieties Name,Count(*) no grupas pēc nosaukuma, kam ir Count(*) > 1 Ja dzimums ir vienāds, tas ir šāds: Izvēlieties vārdu, dzimumu, skaitu (*) no grupas pēc vārda, dzimuma, kam ir skaits (*) > 1 (trīs) 1. metode pasludināt @max veselu skaitli,@id veselu skaitli deklarē cur_rows t kursoru lokāli atlasīt galveno lauku, count(*) no tabulas nosaukuma grupēt pēc galvenā lauka ar count(*) >; 1 Atvērt cur_rows paņemiet cur_rows @id,@max kamēr @@fetch_status=0 Sākt atlasiet @max = @max -1 Rindu skaita @max iestatīšana Dzēst no tabulas nosaukuma, kur primārais lauks = @id paņemiet cur_rows @id,@max beigas Aizvērt cur_rows Iestatīt rindu skaitu 0 2. metode "Ierakstu dublikātiem" ir divas ierakstu dublikātu nozīmes: viena ir pilnīgi dublēts ieraksts, tas ir, ieraksts ar visiem laukiem dublētiem, un otra ir ieraksts ar atslēgas lauku dublikātiem, piemēram, lauks Nosaukums ir dublēts, bet citi lauki ne vienmēr ir dublēti vai tos var ignorēt. 1. Pirmajam atkārtošanās veidam to ir salīdzinoši viegli atrisināt un izmantot atlasīt atšķirīgu * no tabulasNosaukums Rezultātu kopu var iegūt bez ierakstu dublikātiem. Ja nepieciešams dzēst ierakstu dublikātus (saglabāt 1 ieraksta dublikātu), tos var izdzēst šādi atlasiet atšķirīgu * #Tmp no tabulasName nomešanas tabulas nosaukums atlasiet * tabulāName no #Tmp Nomest tabulas #Tmp Šī dublēšanās rodas slikta tabulas noformējuma dēļ, un to var novērst, pievienojot unikālas indeksa kolonnas. 2. Šāda veida dublikāta problēma parasti prasa saglabāt pirmo ierakstu dublikātā, un darbības metode ir šāda Pieņemsim, ka ir dublikāti vārda un adreses lauki, un šiem diviem laukiem ir jāiegūst unikāls rezultātu kopums atlasiet identity(int,1,1) kā autoID, * #Tmp no tableName atlasiet min(autoID) kā autoID #Tmp2 no #Tmp grupas pēc Nosaukums, autoID atlasiet * no #Tmp, kur ir ieslēgts autoID(atlasiet autoID no #tmp2) Pēdējā atlase iegūst rezultātu kopu Vārds un Adrese, kas netiek atkārtota (bet ir papildu autoID lauks, ko var ierakstīt atlases klauzulā, kad faktiski raksta) (4) Vaicājumi tiek dublēti Atlasiet * no tabulas nosaukuma, kur ID (atlasiet ID no tabulas nosaukuma Grupēt pēc ID kam ir count(id) > 1 ) 3. Atrodiet liekus ierakstu dublikātus (vairākus laukus) tabulā Izvēlieties * no Vitae A kur (a.peopleId,a.seq) (atlasiet peopleId,seq no vitae grupas pēc peopleId,seq having count(*) > 1) Skriešana radīs problēmas, un rakstīšana un sūtīšana, piemēram, kur (a.peopleId, a.seq) nedarbosies!
|