Możesz skorzystać z tego rozwiązania. Spowoduje to pobranie wszystkich produktów zawierających WSZYSTKO słowa kluczowe 1, 23 i 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
Gdzie 3
to liczba elementów w Twoim WHERE IN
listę, dzięki czemu możesz odpowiednio dostosować na podstawie liczby tagów, które chcesz sprawdzić.