2010-09-28 59 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