Portál AbcLinuxu, 12. května 2025 13:50

Dotaz: Select + riadkov a následne ich delete

26.7.2010 11:32 majo
Select + riadkov a následne ich delete
Přečteno: 311×
Odpovědět | Admin
Ahoj viete mi niekto poradit ako vymazat tieto riadky?

query=select * FROM login ORDER BY datum_a_cas DESC LIMIT 2,100;

nieco taketo:

delete from login where =(select * FROM login ORDER BY datum_a_cas DESC LIMIT 2,100);
tieto riadky (query) chcem vymazat. Je to mozne? Dakujem 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

26.7.2010 12:28 Ondřej Kopka | skóre: 20 | blog: ondrejk
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Odpovědět | | Sbalit | Link | Blokovat | Admin
delete from login where primarni_klic in (select primarni_klic from login order by datum_a_cas desc limit 2,100);

nejdriv si to pust v transakci at vidis jestli to funguje tak jak jsi zamyslel
26.7.2010 13:18 majo
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Ahoj,

pise:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Spravim si to s ID-ckami teda. Dakujem.
26.7.2010 12:31 Zbyněk Petr (Zboňa) | skóre: 6 | blog: zbona | Brno / Vyškov
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, musis mit v tabulce login nejake ID, kterym identifikujes radky, ktere chces vymazat. Kazdopadne select v podmince deletu pro stejnou tabulku ti asi neprojde, takze to budes muset udelat v dvou krocich:

1) do promenne si vytahnout IDcka ktera chces smazat
2) delete from login where id in (2,5,9,7,50,100)
26.7.2010 13:16 majo
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Ahoj,

dakujem pekne za odpoved. Ked som hladal nasiel som iba odporucania s ID, ale nakolko ich nemam tak som to nemohol takto "identifikovat". Kazdopadne dakujem spravim si to s ID a budem to mazat ako si mi poradil. Este raz dik!
26.7.2010 12:55 voda | skóre: 28
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co rovnou: DELETE FROM login ORDER BY datum_a_cas DESC LIMIT 2,100;?
26.7.2010 13:15 majo
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Ahoj,

takto to nejde skusal som:
ERROR 1064 (42000): 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 '100' at line 1
27.7.2010 14:17 jos
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
a co (čistě vařim z vody)

DELETE login FROM login ORDER BY datum_a_cas DESC LIMIT 2,100
26.7.2010 16:44 stilett
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Odpovědět | | Sbalit | Link | Blokovat | Admin
Problém je v tom, že DELETE nepodporuje LIMIT se dvěma parametry (pouze s jedním) a MySQL celkově nepodporuje LIMIT v poddotazech.

Napadá mě pouze toto ošklivé řešení (z čistě SQL řešení):
DELETE FROM login
USING
  login
  JOIN (
    SELECT
      @rownum:=@rownum + 1 AS rownum,
      m.id
    FROM
      login AS m,
      (SELECT @rownum:=0) AS s
    ORDER BY
      datum_a_cas DESC
  ) AS aa ON login.id = aa.id
WHERE
  aa.rownum BETWEEN 2 AND 101
V principu jde o to, že si nechám očíslovat všechny řádky v tabulce (přidělím jim rownum). Pak toto číslování najoinuju k původní tabulce (přes vícetabulkovou syntax příkazu DELETE), takže podmínku, kterou jsem měl v LIMIT, můžu teď dát do WHERE, protože se můžu odkázat na čísla řádků.
26.7.2010 16:50 majo
Rozbalit Rozbalit vše Re: Select + riadkov a následne ich delete
Dakujem za odpoved. Aktualne si to riesim s ID-ckami zda sa mi to byt lepsie. Tento priklad vsak vyuzijem inde :). Dik.

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.