Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Dynamische Spalten in der SQL Select-Anweisung, wobei undefinierte Werte beibehalten werden

Du bist ganz in der Nähe. Sie müssen Ihrer Schlüssel/Wert-Tabelle itemproperties beitreten einmal für jeden eindeutigen Schlüssel (Eigenschaft), den Sie abrufen müssen. Die Sache ist, dass Sie LEFT JOIN verwenden müssen . Einfaches inneres JOIN unterdrückt die Ausgabezeile, wenn das Join-Kriterium nicht erfüllt ist.

Probieren Sie es aus.

SELECT i.ID as ItemID, i.Name as ItemName, 
       p1.Value AS Color, p2.Value AS Speed, p3.Value AS Price
  FROM items as i
  LEFT JOIN itemproperties AS p1 ON (i.ID=p1.ItemID) AND (p1.Name = 'Color')
  LEFT JOIN itemproperties AS p2 ON (i.ID=p2.ItemID) AND (p2.Name = 'Speed')
  LEFT JOIN itemproperties AS p3 ON (i.ID=p3.ItemID) AND (p3.Name = 'Price')

Die Ausdrücke, die den Name auswählen Werte (z.B. p3.Name = 'Price' ) gehen Sie in Ihr ON -Klausel und nicht Ihr WHERE Klausel.