Почему запрос ничего не выводит?

SELECT
    product.title,
    stock,
    price,
    GROUP_CONCAT(p.title, ': ', pv.value SEPARATOR ', ') property_values
FROM product
INNER JOIN product_property_value pv ON pv.product_id = product.id
INNER JOIN property p ON p.id = pv.property_id
  AND (p.code = 'color' AND pv.value = 'Красный')
  AND (p.code = 'width' AND (pv.value = 4 OR pv.value = 5))
  AND (p.code = 'height' AND pv.value = 5)
GROUP BY product.id;

Полный DDL с данными. Что я делаю не так? Пробовал и через ON и через WHERE, но ничего не выводит...


Ответы (1 шт):

Автор решения: teran

Можно, например, так.

SELECT pr.id
     , pr.title
     , GROUP_CONCAT(p.code, ': ', ppv.value separator ', ' ) AS props
FROM product_property_value  AS ppv
INNER JOIN property AS p ON (
  ppv.property_id = p.id 
  AND (
      (p.code = 'color' AND ppv.value = 'Красный')
      OR (p.code = 'width' AND (ppv.value = 4 OR ppv.value = 5))
      OR (p.code = 'height' AND ppv.value = 5)
    )
)
INNER JOIN product AS pr ON pr.id = ppv.product_id 
GROUP BY pr.id, pr.title
HAVING count(pr.id) = 3;

выбираем все товары, совпадающие по каждому свойству, а потом после группировки оставляем только товары, где присутствуют все 3.

→ Ссылка