Gå til innhold

[mysql] slette visse rader i en tabel,l alt ettersom hva neste rad inneholder


Anbefalte innlegg

Problemstilling

Har behov for å slette mange rader i en stor tabell. Der flere rader etter hverandre (sortert etter col1) er duplikater (col2 = X og col3 = Y. col1 er en int som vil være forskjellig på alle radene i tabellen) så skal alle de radene bortsett fra den siste slettes.

 

Spørsmålet

Er dette noe som kan kjøres via en velformulert SQL-spørring, eller må jeg begynne å koke sammen et script som jobber seg igjennom rad for rad? Kan ta ganske lang tid, da det er snakk om flere millioner rader...

 

Eksempel

Fra følgende rader:

col1	col2	col3
1 	X	Y
4 	X	Y
6 	Z	Data
9	X	Y
10	X	Y
14	X	Y
15	Z	Data

 

Til følgende rader:

col1	col2	col3
4 	X	Y
6 	Z	Data
14	X	Y
15	Z	Data

Lenke til kommentar
Videoannonse
Annonse

hmm google "delete duplicate records" ... http://www.cryer.co.uk/brian/sql/sql_delete_duplicates.htm

 

Kanskje du kan modde dette forslaget pittelittegranne?

 

Delete Similar Records

 

To delete similar records, i.e. where the records are not the same but one field is the same and only one copy needs to be preserved, try the following SQL:

 

delete T1

from MyTable T1, MyTable T2

where T1.dupField = T2.dupField

and T1.uniqueField > T2.uniqueField

 

This will delete all records from the table MyTable which have the same value for the field dupField, leaving that record which has the lowest value in uniqueField.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...