sql >> Database >  >> RDS >> Mysql

Verwijderen uit meerdere tabellen met behulp van volgorde op en limiet

Het doen met een JOIN tegen een subselect om de hoogste id uit de my_rel_table te krijgen

DELETE my_rel_table, my_photo_table
FROM my_rel_table 
INNER JOIN 
(
    SELECT MAX(id) AS MaxId
    FROM my_rel_table 
    WHERE relid = 1 
    AND type = 1
) Sub1
ON my_rel_table.id = Sub1.MaxId
LEFT OUTER JOIN my_photo_table ON my_photo_table.typeid = my_rel_table.typeid
WHERE my_rel_table.relid = 1 
AND my_rel_table.type = 1

Niet direct getest omdat ik geen testgegevens heb!

EDIT - Paar pogingen gedaan om de top 5 te doen, maar wederom niet getest

DELETE my_rel_table, my_photo_table
FROM my_rel_table 
INNER JOIN 
(
    SELECT id
    FROM my_rel_table 
    WHERE relid = 1 
    AND type = 1
    ORDER BY id DESC
    LIMIT 5
) Sub1
ON my_rel_table.id = Sub1.id
LEFT OUTER JOIN my_photo_table ON my_photo_table.typeid = my_rel_table.typeid
WHERE my_rel_table.relid = 1 
AND my_rel_table.type = 1

Of op een andere manier.

DELETE my_rel_table, my_photo_table
FROM my_rel_table 
INNER JOIN 
(
    SELECT id, @Counter:[email protected]+1 AS ItemCounter
    FROM my_rel_table 
    CROSS JOIN (SELECT @Counter:=0) Sub1
    WHERE relid = 1 
    AND type = 1
    ORDER BY id DESC
) Sub1
ON my_rel_table.id = Sub1.id
AND Sub1.ItemCounter <= 5
LEFT OUTER JOIN my_photo_table ON my_photo_table.typeid = my_rel_table.typeid
WHERE my_rel_table.relid = 1 
AND my_rel_table.type = 1



  1. mysqli_connect():(HY000/2002):Kan geen verbinding maken met de lokale MySQL-server via socket

  2. Detecteren of een waarde ten minste één numeriek cijfer in SQLite bevat

  3. Hoe het dagnummer terug te geven met een achtervoegsel in MariaDB

  4. MySQL match() against() - volgorde op relevantie en kolom?