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

Colonne dinamiche nell'istruzione SQL Select, mantenendo valori non definiti

Sei molto vicino. Devi unirti alla tua tabella chiave/valore itemproperties una volta per ogni chiave (proprietà) distinta da recuperare. Il fatto è che devi usare LEFT JOIN . JOIN all'interno semplice sopprime la riga di output quando il criterio di unione non è soddisfatto.

Prova questo.

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')

Le espressioni selezionando il Name valori (z.B. p3.Name = 'Price' ) vai nel tuo ON clausola anziché il tuo WHERE clausola.