Autor Zpráva
Majkelju
Profil
Nevíte někdo, jak na to? Nedopatřením jsem do databáze naimportoval každý záznam 2x a potřeboval bych se duplicit zbavit.
tiso
Profil
Tak ich zmaž všetky a naimportuj ich správne - len raz.
Alphard
Profil
Raději to smazat jak píše tiso, ale ať tady zazní odpověď, jako všude jinde funguje where id%2=0.
MartinR
Profil
@Alphard - tohle by asi neprošlo .. protože pokud
a] nemá autoincrement, pak budou id 1,1,2,2,3,3 - tzn tvým způsobem se nezbaví duplicit, ale sudých id
b] pokud má autoincrement, pak budou 1,2,3 ... 10,11,12 - tzn opět by se zbavil pouze sudých id, ale ne duplicit

@Majkelju - pokud más autoincrement, tak prostě smaž všechny .. where id > poslední_id_které_není_duplicita

A nebo to prostě smaž a naimportuj znovu :-)
Jan Tvrdík
Profil
MartinR:
Téma vlákna je „Smazání záznamů se sudým id“ :)
Tori
Profil
↑ Ale píše, že se chce zbavit duplicit.
Předpokládám, že se duplicita pozná podle sloupce id, kdyžtak si to změňte:
DELETE t1 
FROM tabulka
INNER JOIN (
  SELECT id, COUNT(*) cnt
  FROM tabulka
  GROUP BY id
  HAVING cnt >1
) ref USING (id)

↓ A jo, díky a omlouvam se, psala jsem narychlo.
Kajman
Profil
Tori:
Ale to nezachová jeden záznam v případě duplicit.
MartinR
Profil
Jan Tvrdík:
mea culpa :) příště 2x číst a jednou myslet . .nebo 2x číst a 2x myslet
Alphard
Profil
Nejlepší rada je samozřejmě smazat nepovedený import a nahrát znovu. O konstruktivní řešení se pokusika Tori [#6]. Ale název vlákna "Smazání záznamů se sudým id" se mi zdá natolik sympaticky pro vyhledávače, že jsem chtěl uvést řešení.
Tori
Profil
Tak asi nejjednodušší možnost, jak to vyřešit jen přes databázi:
1) vytvořit tabulku tmp s totožnou strukturou jako je ta s duplicitními záznamy
2) do tabulky tmp přidat unikátní index přes sloupce, kterými se rozliší duplicitní záznam
3)
INSERT IGNORE INTO tmp (sloupec1, sloupec2, ...)
  SELECT sloupec1, sloupec2, ...
  FROM tabulkaDuplicit
4) z tabulky tmp smazat ten unik. klíč, odstranit tabulku duplicit, tmp přejmenovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0