duplikaatit

MySQL-tietokannassa on n. puoli miljoonaa riviä ja nyt sinne lorahti rapiat 47000 riviä tuplasti. Miten nuo tuplat saa kätevimmin pois?
31605
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

1. Luo aputaulu, joka on alkuperäisen taulun kopio.

2. Siirrä alkuperäisen taulun sisältö aputauluun valitsemalla vain uniikit rivit alkuperäisestä taulusta. Malli:

insert into aputaulu (sarake1, sarake2, sarake3)
select distinct sarake1, sarake2, sarake3 from oikeataulu;

3. Aseta aputaulu alkuperäisen tilalle.


Millainen tietokanta sinulla oikein on?? Se ei ole relaatiomallin mukainen, jos sinne pystyy tekemään duplikaatteja. Yksi relaatiomallin perussäännöistä - koskien tiedon yhtenäisyyttä eli integriteettiä - on, että jokainen rivi taulussa on uniikki. Tämä hoidetaan valitsemalla sopiva avain, joka estää duplikaattien syntymisen!

Äänestä
  • "Se ei ole relaatiomallin mukainen, jos sinne pystyy tekemään duplikaatteja. Yksi relaatiomallin perussäännöistä - koskien tiedon yhtenäisyyttä eli integriteettiä - on, että jokainen rivi taulussa on uniikki. Tämä hoidetaan valitsemalla sopiva avain, joka estää duplikaattien syntymisen!"

    Kyllä mielestäni relaatiomallin mukaiseen tauluun voi vahingossa tehdä duplikaatteja. Tai se mitä yleensä dublikaatilla tarkoitetaan kansantajuisesti, sanatarkastihan silloin ei ole kyseessä dublikaatti koska esim id on eri.

    Tuo I.Proqatlisin ehdotus toimii vain jos sinulla ei ole samoja tietoja tauluissa ennen tuota vahinkoa. Mikäli on, niin silloin tuo poisto on vaikeeta koska sinun pitää tietää mitkä sinne todella kuuluu ja mitkä ei. Ehkä helpointa olisi tehdä DELETE kysely noilla tiedoilla mitkä tuli tuplasti ja sit tiedot uudestaan mikäli vain mahdollista.

    Tietenkin jos tieto on jotenkin aikasidottua niin silloinhan I.Proqatlisin ehdotus toimii WHERE ehdoilla.
    Siis
    insert into aputaulu (sarake1, sarake2, sarake3, lisätty)
    select distinct sarake1, sarake2, sarake3, lisätty from oikeataulu WHERE lisätty = '28-2-2007';

    ja

    insert into aputaulu (sarake1, sarake2, sarake3, lisätty)
    select sarake1, sarake2, sarake3, lisätty from oikeataulu WHERE lisätty != '28-2-2007';

    Äänestä

  • Xcvt kirjoitti:

    "Se ei ole relaatiomallin mukainen, jos sinne pystyy tekemään duplikaatteja. Yksi relaatiomallin perussäännöistä - koskien tiedon yhtenäisyyttä eli integriteettiä - on, että jokainen rivi taulussa on uniikki. Tämä hoidetaan valitsemalla sopiva avain, joka estää duplikaattien syntymisen!"

    Kyllä mielestäni relaatiomallin mukaiseen tauluun voi vahingossa tehdä duplikaatteja. Tai se mitä yleensä dublikaatilla tarkoitetaan kansantajuisesti, sanatarkastihan silloin ei ole kyseessä dublikaatti koska esim id on eri.

    Tuo I.Proqatlisin ehdotus toimii vain jos sinulla ei ole samoja tietoja tauluissa ennen tuota vahinkoa. Mikäli on, niin silloin tuo poisto on vaikeeta koska sinun pitää tietää mitkä sinne todella kuuluu ja mitkä ei. Ehkä helpointa olisi tehdä DELETE kysely noilla tiedoilla mitkä tuli tuplasti ja sit tiedot uudestaan mikäli vain mahdollista.

    Tietenkin jos tieto on jotenkin aikasidottua niin silloinhan I.Proqatlisin ehdotus toimii WHERE ehdoilla.
    Siis
    insert into aputaulu (sarake1, sarake2, sarake3, lisätty)
    select distinct sarake1, sarake2, sarake3, lisätty from oikeataulu WHERE lisätty = '28-2-2007';

    ja

    insert into aputaulu (sarake1, sarake2, sarake3, lisätty)
    select sarake1, sarake2, sarake3, lisätty from oikeataulu WHERE lisätty != '28-2-2007';

    Tarkennuksena, tietueita onkin n. 1,2 milj. Sarakkeita on 105. Jokainen tietue on erilainen lukuunottamatta niitä 47000 kpl jotka ovat siis kahteen kertaan. Kiitos tähän astisista neuvoista.

    Äänestä

Kommentoi aloitusta


Pilssimies kirjoitti:

MySQL-tietokannassa on n. puoli miljoonaa riviä ja nyt sinne lorahti rapiat 47000 riviä tuplasti. Miten nuo tuplat saa kätevimmin pois?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu