Portál AbcLinuxu, 28. července 2025 12:38


Dotaz: odstranenie duplicitnych zaznamou v db

25.6.2009 15:35 peter
odstranenie duplicitnych zaznamou v db
Přečteno: 224×
Odpovědět | Admin

Ahoj, v db mam v jednej tabulke zaznamy ktore su tam zapisane dva krat, vsetko je rovnake okrem primarneho kluca, nevie niekto poradit akym dotazom by som tieto duplicitne zaznamy odstranil? Pouzivam MySQL.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

25.6.2009 15:51 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud by to nebyl problém, vytvořit novou tabulku a přelít do ní jen to co chceš (INSERT INTO ... SELECT ... GROUP BY ...).
25.6.2009 16:05 peter
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db

No to by prave problem bol.

25.6.2009 16:18 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db
Tak to bych si asi udělal (dočasnou) tabulku a nasypal do ní id řádků, které smazat, a ty pak smazal. Bohužel je problém mazat ze tabulky, ze které zároveň selektím v poddotazu, proto ta zvláštní tabulka. Nic lepšího mě zrovna nenapadá, možná to bude stačit, možná ne.
25.6.2009 16:44 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db
Tak ještě jeden trik: alter ignore table ... add unique key (...); Díky tomu ignore se duplicitní řádky smažou.
poky74 avatar 25.6.2009 16:18 poky74 | skóre: 36 | blog: Zápisník | Vrchlabí
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jsou ty záznamy řazeny podle id a byly vkládány postupně za sebou (tedy že záznam s id 1 ma obsah AAA id 2 zase AAA id3 BBB id4 BBB atp..)tak si udělat skript, který bude procházet tabulku a každý druhý záznam mazat ?

Nebo jednodušeji, smazat každý se sudým číslem, či vymyslet podobnou prasárnu :)
Chcete Linuxové samolepky nebo Tuxe na klíče? ->
25.6.2009 16:50 peter
Rozbalit Rozbalit vše Re: odstranenie duplicitnych zaznamou v db

tak ze si odpoviem sam, prvy sposob:
 

DELETE bad_rows.*
FROM test AS bad_rows
   INNER JOIN (
      SELECT save_timestamp
      FROM test
      GROUB BY save_timestamp
      HAVING COUNT(*) > 1
   ) AS good_rows ON good_rows.save_timestamp = bad_rows.save_timestamp;

druhy sposob:

DELETE bad_rows.*
FROM test AS bad_rows
WHERE EXISTS(
SELECT *
FROM test AS good_rows
WHERE good_rows.save_timestamp = bad_rows.save_timestamp
GROUP BY save_timestamp
HAVING COUNT(*) > 1
);

 

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.