Autor Zpráva
Major
Profil *
Ahojte mam databazu s tabulkou zaznam ktora ma 3 stlpce.
ID; auto; osoba

v tejto tabulke mam strasne vela zaznamou a najviac takych ktore sa mi opakuju.

Potreboval by som vymazat vsetky riadky v ktorych sa Auto a osoba upakuje.

Skusal som to pomocou takehoto dotazu ale dako mi to nejde:

DELETE FROM zaznam WHERE id NOT IN
(SELECT MIN(id) FROM zaznam GROUP BY auto, osoba)


Dakujem za odpoved
Kajman_
Profil *
viz. faq
http://diskuse.jakpsatweb.cz/.sandbox/?action=vthread&forum=28&topic=37836
Major
Profil *
Takyto pripad sa podla toho asi riesit neda. Poprosil by som asi ine riesenie alebo ak by bol niekto ochotny a poradil mi ako to podla toho zapisat.
Kajman_
Profil *
Jasně, že se dá, proto jsem psal ten odkaz. Po úpravě pro Vaši tabulku by to mohlo být:
DELETE FROM t1 USING zaznam t1, zaznam t2 WHERE t1.auto=t2.auto AND t1.osoba=t2.osoba AND t1.id>t2.id


Ale raději si to zkuste nejdříve na testovacích datech :-)
Major
Profil *
Mozem sa este spytat co je vlastne to t1 a t2? to je daka docasna premenna?
Kajman_
Profil *
Pokud chcete propojovat tabulku se samo sebou, tak se bez jednoznačných aliasů neobejdete.
Major
Profil *
v mojom konkretnom pripade tento zapis vyzera takto:

DELETE FROM zc_products_options_values_to_products_options t1 USING zc_products_options_values_to_products_options t1, zc_products_options_values_to_products_options t2 WHERE t1.products_options_id=t2.products_options_id AND t1.products_options_values_id=t2.products_options_values_id AND t1.products_options_values_to_products_options_id>t2.products_options_values_to_products_options_id

a ked konkretne toto napisem v mysqladmine v SQL prikazoch tak mi vyhodi takuto chybu

MySQL hlási:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't1 USING zc_products_options_values_to_products_options t1, zc_products_options_' at line 1
Kajman_
Profil *
Mezi from a using nové verze vyžadují pouze onen alias t1, nestihl jsem to asi včas upravit. To by mohlo být ono.
Major
Profil *
Bohuzial len chyba:


DELETE FROM t1 USING zc_products_options_values_to_products_options t1,
zc_products_options_values_to_products_options t2 WHERE t1.products_options_id = t2.products_options_id AND t1.products_options_values_id = t2.products_options_values_id AND t1.products_options_values_to_products_options_id > t2.products_options_values_to_products_options_id

MySQL hlási:
#1030 - Got error 134 from storage engine
Kajman_
Profil *
Repair nepomůže?
Major
Profil *
skusil som repair a nasledne som spustil ten dotaz ale stale ta ista chyba
Kajman_
Profil *
Tak bych zkusil delete ignore..., nebo zkontrolovat, zda je to poslední stabilní verze a v seznamů bugů něco takového není. A když ani to nepůjde, tak si selectem vytvořit temporary tabulku s těmi id, které chcete mazat a tu teprve použít v delete.
Major
Profil *
nasiel som niekde na nete este toto:
DELETE IGNORE FROM ta USING zc_products_options_values_to_products_options AS ta,
zc_products_options_values_to_products_options AS tb WHERE ta.products_options_values_to_products_options_id > tb.products_options_values_to_products_options_id AND ta.products_options_id = tb.products_options_id AND ta.products_options_values_id = tb.products_options_values_id

vraj to ma tiez mazat duplikaty ale tu my vyhodilo hlasku:

#2013 - Lost connection to MySQL server during query

najprv to pracovalo vyzera lo ze to de a potom to vypisalo.

mam v tabulke 467 592 zaznamov a malo by tam zostat cca 1000
Kajman_
Profil *
Buď si přidejte index (products_options_id,products_options_values_id), ať je to rychlejší, nebo si tam dejte na konec nějaký limit - třeba 100000 a pouštějte to, dokud se budě něco mazat.
Major
Profil *
ked zadam nieco taketo:

DELETE IGNORE FROM t1 USING zc_products_options_values_to_products_options t1,
zc_products_options_values_to_products_options t2 WHERE t1.products_options_id = t2.products_options_id AND t1.products_options_values_id = t2.products_options_values_id AND t1.products_options_values_to_products_options_id > t2.products_options_values_to_products_options_id LIMIT 1000

tak mi vyhodi toto:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10' at line 1
Major
Profil *
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 1000' at line 1

takto. to predtzm som skusal s inym limitom.
Kajman_
Profil *
Ajo, syntaxe delete using nepovoluje limit, bez using zase nesmíte použít tu samou tabulku ještě jednou. Index máte?

Je potřeba mít toto svižné

select distinct t1.*
from   zc_products_options_values_to_products_options t1,
       zc_products_options_values_to_products_options t2
WHERE  t1.products_options_id = t2.products_options_id
       AND t1.products_options_values_id = t2.products_options_values_id
       AND t1.products_options_values_to_products_options_id > t2.products_options_values_to_products_options_id


Pak by měl být svižný i delete. Případně si to vyřešte přes tu dočasnou tabulku.

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: