Lisää
Miten voin poistaa päällekkäiset rivit?
Mikä on paras tapa poistaa päällekkäiset rivit melko suuresta SQL Server
-taulukosta (eli yli 300 000 riviä)?
Rivit eivät tietenkään ole täydellisiä kaksoiskappaleita, koska RowID
-identiteettikenttä on olemassa.
MyTable
RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
1250
3
Jos oletetaan, että nollia ei ole, ryhmitellään sarakkeiden perusteella ja valitaan säilytettäväksi riviksi rivin MIN (tai MAX) RowId. Poista sitten kaikki, jolla ei ollut rivin tunnusta:
Jos sinulla on kokonaisluvun sijasta GUID, voit korvata sen seuraavasti
Microsoftin tukisivustolla on hyvä artikkeli kaksoiskappaleiden poistamisesta. Se on melko konservatiivinen - kaikki on tehtävä erillisinä vaiheina - mutta sen pitäisi toimia hyvin suuria taulukoita vastaan.
Olen aiemmin käyttänyt tähän self-joineja, vaikka sitä voitaisiinkin luultavasti kaunistella HAVING-lausekkeella:
Tässä on toinen hyvä artikkeli kaksoiskappaleiden poistamisesta.
Siinä käsitellään, miksi se on vaikeaa: "SQL perustuu relaatioalgebraan, ja kaksoiskappaleet eivät voi esiintyä relaatioalgebrassa, koska kaksoiskappaleet eivät ole sallittuja joukossa."
Tempputauluratkaisu ja kaksi mysql-esimerkkiä.
Aiotko jatkossa estää sen tietokantatasolla vai sovelluksen näkökulmasta. Ehdottaisin tietokantatasoa, koska tietokantasi pitäisi olla vastuussa referentiaalisen eheyden ylläpitämisestä, kehittäjät vain aiheuttavat ongelmia ;)