Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment faire cette requête eav pour faire un résultat horizontal

Il existe plusieurs façons de mettre cela en œuvre. Quelque chose comme ceci devrait fonctionner en revenant sur la table plusieurs fois pour chaque valeur d'attribut :

SELECT p.product_id,
    a.value height,
    a2.value width
FROM Product p
    JOIN Product_Attribute pa ON p.product_id = pa.product_id 
    JOIN Attribute a ON pa.attribute_id = a.attribute_id AND a.name = 'height'
    JOIN Product_Attribute pa2 ON p.product_id = pa2.product_id 
    JOIN Attribute a2 ON pa2.attribute_id = a2.attribute_id AND a2.name = 'width'

Et voici le Violon .

Voici une approche alternative utilisant MAX et GROUP BY que je préfère personnellement :

SELECT p.product_id,
    MAX(Case WHEN a.name = 'height' THEN a.value END) height,
    MAX(Case WHEN a.name = 'width' THEN a.value END) width
FROM Product p
    JOIN Product_Attribute pa ON p.product_id = pa.product_id 
    JOIN Attribute a ON pa.attribute_id = a.attribute_id 
GROUP BY p.product_id

Bonne chance.