Mysql左连接,根据左表最大id获取所有右表列和左表中的2列

标签 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 个照片更新。我希望它返回每个系列的最大照片 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/

相关文章:

按该字段选择时的 MySql 更新字段

sql - 填写 BigQuery 中联接表的缺失值

mysql - Deaggrigate 然后应用 With Rollup

javascript - 对选择了多个选项的选择元素进行排序会颠倒顺序

java - 尝试让java程序连接到Mac上的本地Mysql数据库

mysql - 如何从 sql 中的某些 ID 获取最小值和最大值

mysql - 没有权限的用户的 PDO errorinfo

java - 使用 JDBC 将值插入 SQL 数据库

mysql - 在单独的行中检索重复的月份数据

sockets - cygwin上FD_ISSET的pselect问题