2010-09-28 60 views
0

使用MySQL,我有一組表格,其中包含來自成員 - >項目 - >照片的1-> N關係。SQL - 選擇第一個匹配記錄加入

我想選擇一個成員的項目列表+從第一個相關的照片(首先我的意思是最低排序順序的照片)的一些列。

目前我有這個查詢哪些工作,但似乎過於複雜。有沒有更簡單的方法和/或如何改進這個查詢。特別是,我關心最內在的選擇聲明 - MySQL是否會優化它,僅針對有問題的成員使用照片,並且應該使用其他where子句來幫助優化它。

SELECT items.member_id, items.item_id, items.title, p.photo_id, p.blob_id, p.image_width, p.image_height 
FROM items 
LEFT JOIN 
(
    SELECT photos.item_id, photos.photo_id, photos.blob_id, photos.image_width, photos.image_height 
    FROM 
    (
     SELECT item_id, min(sort_order) as min_sort_order 
     FROM photos 
     GROUP BY item_id 
    ) AS x 
    INNER JOIN photos on photos.item_id=x.item_id and photos.sort_order=x.min_sort_order 
) AS p ON items.item_id = p.item_id 
WHERE items.member_id=1 
ORDER BY items.title; 

回答

0
SELECT 
     items.member_id, items.item_id, items.title, photo.photo_id, photo.blob_id, photo.image_width, photo.image_height 
FROM 
     items 
JOIN photos on items.item_id = photos.item_id 
JOIN (SELECT item_id, min(sort_order) as min_sort_order 
     FROM photos 
     GROUP BY item_id) min_photo on photos.item_id=min_photo.item_id and photos.sort_order=min_photo.min_sort_order 
WHERE items.member_id=1 
ORDER BY items.title; 
+0

差不多。我忘了提及物品不需要有照片。此查詢不會返回這些項目。 – 2010-09-28 21:23:00

+0

在這種情況下,您的查詢似乎沒問題。 – CristiC 2010-09-29 07:09:32