Тут надо понимать, что Вы пытаетесь выбрать 1 строку с product_id с выборкой по двум строкам. В одной строке, разумеется, не будет значений "
тип изделия" и "
форма изделия". Следовательно, в одном запросе и с выборкой по одной строке это не решается, по крайней мере "в лоб".
свести выборку по нескольким строкам к одной можно несколькими способами. Навскидку,
SELECT product_id FROM atribute_product WHERE
product_id IN (SELECT product_id FROM product_attribute WHERE attribute_id = 1 AND value IN ("Классическое", "Спортивное") AND
product_id IN (SELECT product_id FROM product_attribute WHERE attribute_id = 2 AND (value = ... OR value = ...))
Или, используя несколько INNER JOIN. Наверняка есть различные оптимизации этих подходов. Например, суб-запрос можно попробовать свести к одному, где, полагаю, получится выбрать количество строк
COUNT(product_id) AS cnt и собственно
product_id и проверить
HAVING cnt = 3 (что может быть осложнено комбинациями и/или).
PS Возможно получится схитрить, избежать вложенные запросы с оператором CASE, группировкой по product_id и опять-таки с проверкой на количество условий:
SELECT product_id, COUNT(product_id) as cnt
WHERE ... CASE WHEN attribute_id = 1 THEN value = "Классическое" WHEN attribute_id = 2 THEN value LIKE "Кругл%" ELSE 0 END ...
GROUP BY product_id
HAVING cnt = 2
Увы, нет возможности попробовать-поизучать разные варианты для ответа на вопрос.
Однако, первый пример с группой вложенных запросов должен работать.