SQL - 为连接选择第一个匹配记录

时间:2010-09-28 13:40:25

标签: sql mysql

使用MySQL,我有一组表与成员的> N关系 - >项目 - >照片。

我正在尝试从第一张相关照片中选择一个成员的项目列表+一些列(首先我的意思是排序顺序最低的照片)。

目前我有这个查询有效,但似乎过于复杂。是否有更简单的方法和/或如何改进此查询。特别是,我关注最内部的选择语句 - 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;

1 个答案:

答案 0 :(得分: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;