duplikaatit

Pilssimies

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

3

1548

Äänestä

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • I.Proqatlis

      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!

      • Xcvt

        "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';


      • 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.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Takaisin ylös

    Luetuimmat keskustelut

    1. Ensi kesänä

      Näin kesän viimeisenä minuutteina ajattelen sinua. Olisiko seuraava kesä "meidän" kesä? Tänä vuonna ei onnistuttu, mutta
      Ikävä
      70
      3550
    2. Anne Kukkohovin karmeat velat ovat Suomessa.

      Lähtikö se siksi pois Suomesta ? Et on noin kar? mean suuret velat naisella olemassa
      Kotimaiset julkkisjuorut
      148
      3503
    3. Tukalaa kuumuutta

      Tietäisitpä vaan kuinka kuumana olen käynyt viime päivät. Eikä johdu helteestä, vaan sinusta. Mitäköhän taikoja olet teh
      Ikävä
      46
      3322
    4. Sinä, ihastukseni

      Mitä haluaisit tehdä kanssani ensimmäisenä?
      Ihastuminen
      53
      2769
    5. Tiedät ettei tule toimimaan.

      Mielenterveys ei kummallakaan kestä.
      Ikävä
      32
      2036
    6. Okei, myönnetään,

      Oisit sä saanut ottaa ne housutkin pois, mutta ehkä joskus jossain toisaalla. 😘
      Ikävä
      30
      1962
    7. Et siis vieläkään

      Et ilmeisesti ole vieläkään päässyt loppuun asti mun kirjoituksissa täällä. Kerro ihmeessä sit, kun valmista 😁 tuskin k
      Ikävä
      40
      1695
    8. Onko kaivatullasi

      himmeä kuuppa?
      Ikävä
      48
      1676
    9. Mihin hävisi

      Mihin hävisi asiallinen keskustelu tositapahtumista, vai pitikö jonkin Hannulle kateellisen näyttää typeryytensä
      Iisalmi
      96
      1625
    10. On jo heinäkuun viimeinen päivä.

      En taida nähdä sinua koskaan.
      Rakkaus ja rakastaminen
      39
      1390
    Aihe