我有一个图书系列表(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 个照片更新。我希望它返回每个系列的最大照片 ID,因此它应该只返回 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
关于Mysql左连接,根据左表最大id获取所有右表列和左表中的2列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013069/