Bạn đang rất gần. Bạn cần tham gia bảng khóa / giá trị của mình itemproperties
một lần cho mỗi khóa (thuộc tính) riêng biệt mà bạn cần truy xuất. Vấn đề là, bạn cần sử dụng LEFT JOIN
. Đồng bằng bên trong JOIN
loại bỏ hàng đầu ra khi tiêu chí kết hợp không được đáp ứng.
Hãy thử điều này.
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')
Các biểu thức chọn Name
giá trị (z.B. p3.Name = 'Price'
) vào ON
của bạn chứ không phải là WHERE
của bạn mệnh đề.