Puoi usare questa soluzione. Questo ottiene tutti i prodotti che contengono TUTTO parole chiave 1, 23 e 54:
SELECT a.*
FROM products a
INNER JOIN product_tags b ON a.product_id = b.product_id
WHERE b.tag_id IN (1,23,54)
GROUP BY a.product_id
HAVING COUNT(1) = 3
Dove 3
è il numero di articoli nel tuo WHERE IN
list, così puoi regolare di conseguenza in base alla quantità di tag che vuoi controllare.