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

Hvordan laver denne eav-forespørgsel for at lave vandret resultat

Der er flere måder at implementere dette på. Noget som dette burde virke sammenføjning tilbage på bordet flere gange for hver attributværdi:

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'

Og her er violen .

Her er en alternativ tilgang ved hjælp af MAX og GROUP BY, som jeg personligt foretrækker:

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

Held og lykke.



  1. Ekstremt grundlæggende PHP og Mysql

  2. Fordele og sikkerhed i Amazon Relational Database Service

  3. Måler du SQL Server-ydeevne med disse metrics?

  4. PHP :indsæt flere afkrydsningsfelter i én MySQL-kolonne