A bylo to ošklivé. Funguje to dobře, dokud nedojde k nějaké další významné zátěži DB, a pak to jde všechno velmi pomalu. To je většinou způsobeno omezeními IO serveru, ale jednodušším přístupem bylo dostat isfiction a isNonFiction do tabulek MEMORY a příkaz DELETE pak může vypadat takto:
DELETE tmp_table FROM tmp_table
INNER JOIN
(
SELECT ASIN, MAX( isFiction ) AS isFiction, MAX( isNonFiction ) AS isNonFiction
FROM tmp_table
GROUP BY ASIN
HAVING isFiction =1
AND isNonFiction =1
) D
WHERE D.ASIN=tmp_table.ASIN AND tmp_table.isNonFiction=1
Při testování se celý proces zkrátil z přibližně 90 sekund na 10 sekund.