sql >> Databasteknik >  >> RDS >> Mysql

Hur gör denna eav-fråga för att göra horisontella resultat

Det finns flera sätt att implementera detta. Något liknande det här borde fungera att gå tillbaka på bordet flera gånger för varje attributvärde:

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'

Och här är fiol .

Här är ett alternativt tillvägagångssätt med MAX och GROUP BY som jag personligen föredrar:

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

Lycka till.



  1. Uppdatera endast tid i ett mysql DateTime-fält

  2. Oracle LIMIT n,m ekvivalent

  3. PostgreSQL använder inte ett partiellt index

  4. Hur skapar man initializer för att skapa och migrera mysql-databas?