Jesteś bardzo blisko. Musisz dołączyć do tabeli klucz/wartość itemproperties
raz dla każdego odrębnego klucza (właściwości), który musisz odzyskać. Chodzi o to, że musisz użyć LEFT JOIN
. Zwykły wewnętrzny JOIN
pomija wiersz wyjściowy, gdy kryterium łączenia nie jest spełnione.
Spróbuj tego.
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')
Wyrażenia wybierające Name
wartości (np. p3.Name = 'Price'
) wejdź w ON
klauzulę zamiast WHERE
klauzula.