sql >> Base de Datos >  >> RDS >> Mysql

Columnas dinámicas en la instrucción SQL Select, manteniendo valores indefinidos

Estás muy cerca. Debe unirse a su tabla clave/valor itemproperties una vez por cada clave distinta (propiedad) que necesite recuperar. La cosa es que necesitas usar LEFT JOIN . Interior liso JOIN suprime la fila de salida cuando no se cumple el criterio de unión.

Prueba esto.

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

Las expresiones seleccionando el Name valores (z.B. p3.Name = 'Price' ) entra en tu ON cláusula en lugar de su WHERE cláusula.