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