Mysql
 sql >> Database >  >> RDS >> Mysql

Come rendere questa query eav per ottenere un risultato orizzontale

Ci sono diversi modi per implementarlo. Qualcosa del genere dovrebbe funzionare unendosi di nuovo sul tavolo più volte per ogni valore di attributo:

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'

Ed ecco il Fiddle .

Ecco un approccio alternativo utilizzando MAX e GROUP BY che personalmente preferisco:

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

Buona fortuna.