Skocz do zawartości

Sub-select / left inner join w DELETE


kawa

Rekomendowane odpowiedzi

Wie ktoś może jak zmienić takie SQL na subselect lub inner join? Może jakiś pomysł na optymalizację? Kod ma usuwać stare "ostatnio oglądane" profile dla każdego z użytkowników, jeśli dany użytkownik ma ich > 100. Z góry dzięki.

DROP TABLE IF EXISTS __cleanlooked;
CREATE TEMPORARY TABLE  __cleanlooked (SELECT id FROM (SELECT *,
(SELECT created FROM looked WHERE userid_looked_at=ttt.userid_looked_at LIMIT 100,1) as delete_after 
from looked as ttt
HAVING  ttt.created < delete_after
)  as ids );
DELETE from looked USING looked, __cleanlooked WHERE looked.id=__cleanlooked.id;

Odnośnik do komentarza
Udostępnij na innych stronach

czy

SELECT created FROM looked WHERE .... LIMIT 100,1

daje gwarancję ze wyniki zawsze bedą OK ?

Chodzi mi o to ze w zapytaniu nie ma ORDER i jeżeli z nieznanych powodów wyniki będą inaczej posortowane to wynik będzie błędny

Co do pomysłow na optymalizację to brak, ewentualnie można to przerobić na bez tabel tymczasowych ale działać bedzie tak samo.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności