Mysql左边连接,根据左表max id从左表中获取所有正确的表列和2列

时间:2014-01-09 06:27:30

标签: mysql sql select group-by left-join

我有一本书系列表(bs),其中包含基本的系列信息。 然后我有一本书系列照片表(bsp),它根据bs id保存每个bs的缩略图。 bs只能有一个缩略图,所以bsp表得到一个 插入每个照片更新,当需要显示时,它从该表中获取最大ID。我现在需要获得每张bs和最大id照片。我的查询返回所有正确的行,但它不限于每bs 1,它返回每个bs / bsp组合。这是查询:

select bs.*, bsp.Id AS BookSeriesPhotoId, bsp.Ext AS BookSeriesPhotoExt
FROM BookSeries AS bs 
LEFT JOIN BookSeriesPhotos bsp ON bsp.BookSeriesId = bs.Id
WHERE(
  SELECT MAX(Id) FROM BookSeriesPhotos GROUP BY bsp.Id
) 

这将返回6行,第一个系列中有4行,其中有4个照片更新,第2个系列中有2个有2个照片更新。我希望它返回每个系列的最大照片ID,所以它应该只返回2行。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT bs.*, bsp.Id AS BookSeriesPhotoId, bsp.Ext AS BookSeriesPhotoExt
FROM BookSeries AS bs 
LEFT JOIN (SELECT bsp.BookSeriesId, bsp.Id, bsp.Ext 
           FROM BookSeriesPhotos bsp 
           INNER JOIN (SELECT bsp.BookSeriesId, MAX(bsp.Id) ID 
                       FROM BookSeriesPhotos bsp GROUP BY bsp.BookSeriesId
                     ) AS A ON bsp.BookSeriesId = A.BookSeriesId AND bsp.Id = A.Id
         ) AS bsp ON bsp.BookSeriesId = bs.Id