Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Colunas dinâmicas na instrução SQL Select, mantendo valores indefinidos


Você está muito perto. Você precisa juntar sua tabela de chave/valor itemproperties uma vez para cada chave distinta (propriedade) que você precisa recuperar. O problema é que você precisa usar LEFT JOIN . Simples JOIN interno suprime a linha de saída quando o critério de junção não é atendido.

Tente isso.
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')

As expressões selecionando o Name valores (z.B. p3.Name = 'Price' ) vá em seu ON cláusula em vez do seu WHERE cláusula.