Autor | Zpráva | ||
---|---|---|---|
Major Profil * |
#1 · Zasláno: 21. 9. 2009, 10:47:22
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 * |
#2 · Zasláno: 21. 9. 2009, 10:59:12
|
||
Major Profil * |
#3 · Zasláno: 21. 9. 2009, 21:07:20
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 * |
#5 · Zasláno: 22. 9. 2009, 08:18:01
Mozem sa este spytat co je vlastne to t1 a t2? to je daka docasna premenna?
|
||
Kajman_ Profil * |
#6 · Zasláno: 22. 9. 2009, 08:23:27
Pokud chcete propojovat tabulku se samo sebou, tak se bez jednoznačných aliasů neobejdete.
|
||
Major Profil * |
#7 · Zasláno: 22. 9. 2009, 08:34:23
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 * |
#8 · Zasláno: 22. 9. 2009, 08:44:46
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 * |
#9 · Zasláno: 22. 9. 2009, 08:55:03
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 * |
#10 · Zasláno: 22. 9. 2009, 08:59:54
Repair nepomůže?
|
||
Major Profil * |
#11 · Zasláno: 22. 9. 2009, 12:38:46
skusil som repair a nasledne som spustil ten dotaz ale stale ta ista chyba
|
||
Kajman_ Profil * |
#12 · Zasláno: 22. 9. 2009, 12:47:54
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 * |
#13 · Zasláno: 22. 9. 2009, 12:57:46
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 * |
#14 · Zasláno: 22. 9. 2009, 13:03:08
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 * |
#15 · Zasláno: 22. 9. 2009, 13:23:25
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 * |
#16 · Zasláno: 22. 9. 2009, 13:23:55
#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 * |
#17 · Zasláno: 22. 9. 2009, 13:29:44
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. |
||
Časová prodleva: 15 let
|
0