SELECT p.id, p.name FROM product AS p JOIN product_option AS o ON p.id = o.product_id AND o.option_id in(1, 14, 25) GROUP BY p.id, p.name HAVING count(1)=3
3 in the condition HAVING is the number of conditions that must match.
Will work provided that the product can not have two identical options. Your database structure does not guarantee this, because Uniqueness is certain only in the id field of the product_option table. I recommend removing the id field and the primary key altogether as a composite key from the two remaining columns, primary key (option_id, product_id) .