sql >> Databáze >  >> RDS >> Mysql

Odstraňte z více tabulek pomocí pořadí podle a limitu

Udělejte to pomocí JOIN proti dílčímu výběru, abyste získali nejvyšší id z my_rel_table

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

Netestováno přímo, protože nemám žádná testovací data!

EDIT - Pár pokusů udělat top 5, ale opět netestováno

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

Nebo jiným způsobem.

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. SSMS verze 18 – žádné databázové diagramy

  2. Nápověda k dotazu SQL - mají dvě podmínky kde v podmínce spojení

  3. Dotaz SQL pro provádění vyhledávání poloměru na základě zeměpisné šířky a délky

  4. Jak vložit řádek do tabulky, která má pouze jeden sloupec automatického přírůstku?