SQL-为联接选择第一条匹配记录

SQL-为联接选择第一条匹配记录,sql,mysql,Sql,Mysql,使用MySQL,我从member->items->photos获得了一组具有1->N关系的表 我试图从第一张相关照片中选择一个成员项目列表+一些列(我指的是排序顺序最低的照片) 目前我有这个查询,它可以工作,但似乎过于复杂。是否有更简单的方法和/或如何改进此查询。特别是,我关心的是最内部的select语句——MySQL是否会将其优化为只处理相关成员的照片,我是否应该在其中使用额外的where子句来帮助优化它 SELECT items.member_id, items.item_id, items

使用MySQL,我从member->items->photos获得了一组具有1->N关系的表

我试图从第一张相关照片中选择一个成员项目列表+一些列(我指的是排序顺序最低的照片)

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

几乎。我忘了提到物品不需要有照片。此查询不返回这些项目。在这种情况下,您的查询似乎是正确的。
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;