Jste velmi blízko. Musíte připojit svou tabulku klíč/hodnota itemproperties jednou pro každý odlišný klíč (vlastnost), který musíte načíst. Jde o to, že musíte použít LEFT JOIN . Prostý vnitřní JOIN potlačí výstupní řádek, když není splněno kritérium spojení.
Zkuste toto.
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')
Výrazy vybírající Name hodnoty (z.B. p3.Name = 'Price' ) přejděte do ON místo vašeho WHERE klauzule.