Mysql
 sql >> Base de données >  >> RDS >> Mysql

Colonnes dynamiques dans l'instruction SQL Select, en conservant des valeurs indéfinies

Vous êtes très proche. Vous devez joindre votre table clé/valeur itemproperties une fois pour chaque clé distincte (propriété) que vous devez récupérer. Le fait est que vous devez utiliser LEFT JOIN . JOIN intérieur simple supprime la ligne de sortie lorsque le critère de jointure n'est pas rempli.

Essayez ceci.

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

Les expressions sélectionnant le Name valeurs (z.B. p3.Name = 'Price' ) allez dans votre ON clause plutôt que votre WHERE clause.