sql >> Database >  >> RDS >> Mysql

Hoe maak je deze eav-query om een ​​horizontaal resultaat te maken?

Er zijn verschillende manieren om dit te implementeren. Iets als dit zou moeten werken om meerdere keren terug te komen op de tafel voor elke attribuutwaarde:

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'

En hier is de Fiddle .

Hier is een alternatieve benadering met MAX en GROUP BY die ik persoonlijk prefereer:

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

Veel succes.



  1. Fatale fout:oproep naar ongedefinieerde functie mysqli_result()

  2. Hoe een identiteitskolom aan tabel toe te voegen door TSQL en GUI in SQL Server - SQL Server / T-SQL-zelfstudie, deel 40

  3. Standaardwaarde instellen als lege tekenreeks wordt doorgegeven

  4. zoekcode in servlet naar mysql?