Portál AbcLinuxu, 13. května 2025 00:39

Dotaz: MySQL - Odstranění duplicitních řádků

3.4.2014 17:16 Marek
MySQL - Odstranění duplicitních řádků
Přečteno: 3177×
Odpovědět | Admin
Ahoj, poradil by někdo jak SQL dotazem odstranit celý řádek, pokud je ve sloupečku duplicitní záznam? Děkuji za pomoc.

Řešení dotazu:


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

Odpovědi

3.4.2014 17:19 Kit
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
REPLACE
Tarmaq avatar 3.4.2014 17:52 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
neuvedl jsi strukturu te tabulky, tak aspon nastrel jak by slo resit
DELETE f1
FROM dbo.foo f1
JOIN dbo.foo f2 ON f2.value = f1.value
WHERE f1.id > f2.id
Az ty duplicity smazes, nezapomen vytvorit unique constraint nad sloupcem, v kterem nemaji byt duplicity..
Don't panic!
Tarmaq avatar 3.4.2014 17:57 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
to dbo si tam samozrejme odmysli ;]

Jinak dalsi variantou je vytvorit novou tabulku, vlozit do ni jiz unikatni zaznamy z puvodni tabulky, puvodni tabulku smazat a novou prejmenovat na puvodni nazev..
Don't panic!
Josef Kufner avatar 5.4.2014 14:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je dobrá otázka. Na jeden SQL dotazto v MySQL asi nepůjde. Kdyby MySQL umožňovalo provést subselect zupravované tabulky, tak by to šlo.

Asi nejjednodušší je vytvořit si dočasnou tabulku, zkopírovat do ní data pomocí dotazu INSERT … SELECT … GROUP BY …. Potom smazat obsah původní tabulky a zkopírovat deduplikovaná data, nebo smazat to, co v dočasné tabulce není.
Hello world ! Segmentation fault (core dumped)
7.4.2014 11:54 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
přidat UNIQUE KEY podle přidat IGNORE

IGNORE is a MySQL extension to standard SQL. It controls how ALTER TABLE works if there are duplicates on unique keys in the new table or if warnings occur when strict mode is enabled. If IGNORE is not specified, the copy is aborted and rolled back if duplicate-key errors occur. If IGNORE is specified, only one row is used of rows with duplicates on a unique key. The other conflicting rows are deleted. Incorrect values are truncated to the closest matching acceptable value.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
15.10.2015 12:26 ďobo
Rozbalit Rozbalit vše Re: MySQL - Odstranění duplicitních řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin

pokud by to někoho zajímalo, šlo by to i přes DISTINCT, domnívám se pseudokódem:

1. CREATE TABLE AS SELECT DISTINCT sloupec_s_duplicitou, ... tím se vytvoří nová tabulka s daty, ale nový sloupec má unikátní hodnoty. 2. odmazat starou tabulku a používat jen novou. před tím vším nejdřív backup

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.