这是我需要的一种查询。但由于在连接中使用 MAX() 函数,我不断收到错误。如何使用此逻辑编写有效的查询?
编辑:我已更新我的查询,但它没有返回错误。然而,这存在一个逻辑错误。如果 image.sort_index = -1,我不想要最大排序索引。如果 image.sort_index = -1,如何中断 bool 条件检查?以下是更新后的查询
SELECT
albums.ID, albums.title, images.ID AS thumb_id, images.image_count as image_count
FROM
`albums`
LEFT JOIN
(
SELECT
ID, album_id, sort_index,
MAX(sort_index) AS max_sort_index,
COUNT(ID) as image_count
FROM
`images`
GROUP BY album_id
)
ON images.album_id = albums.ID
AND
(images.sort_index = -1 OR images.sort_index = images.max_sort_index)
最佳答案
MAX()
函数是一个聚合函数:它仅在执行所有 JOIN
和 WHERE
子句后运行。相反,将其分解为子查询,因此它只运行一次,并在外部查询的其余部分之前运行:
SELECT
albums.*, images.ID as album_thumb
FROM
`albums`
LEFT JOIN `images` ON
images.album_id = albums.ID
AND
(images.sort_index = -1 OR images.sort_index = (
SELECT MAX(sort_index) FROM images
)
)
缺点是,如果您希望在 images
范围内对外部查询进行任何其他限制(WHERE
子句),则需要在子查询中复制它们以及。这是 SQL 的限制。
关于mysql - 在连接中使用 Max(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431339/