Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 14609|Atbildi: 0

[Padomi] SQL Kā vaicāt tabulu, lai noņemtu dublikātus

[Kopēt saiti]
Publicēts 09.10.2014 11:03:04 | | |

SQL vienas/vairāku tabulu vaicājumi noņem ierakstu dublikātus

Viena tabula atšķirīga

  1. 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!






Iepriekšējo:SQL izveido saglabātās procedūras ar parametriem
Nākamo:EPUBReader lasītājs, obligāts EPUB failu atvēršanai
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com