我有一个我一直在优化的 MySQL 查询,目前它有 2 个相关/相关的子查询。
我想知道是否可以重写以避免这些?
SELECT *
FROM `pp_slides`
JOIN `pp_slide_content`
ON `pp_slides`.`id` = `pp_slide_content`.`slide_id`
AND `pp_slide_content`.`version` = (
SELECT max(`version`) FROM `pp_slide_content` WHERE `slide_id` = `pp_slides`.`id`
)
LEFT JOIN `pp_published_slides`
ON `pp_published_slides`.`slide_id` = `pp_slides`.`id`
AND `pp_published_slides`.`slide_version` = `pp_slide_content`.`version`
AND `pp_published_slides`.`publish_id` = (
SELECT max(`publish_id`) FROM `pp_published_slides` WHERE `pp_published_slides`.`slide_id` = `pp_slides`.`id` AND `pp_published_slides`.`slide_version` = `pp_slide_content`.`version`
)
LEFT JOIN `pp_publish` ON `pp_publish`.`id` = `publish_id`
WHERE `pp_slides`.`product_id` = '2'
AND `pp_slides`.`country_code` = 'gb'
快速概览:创建了一张幻灯片,并支持版本更改。然后发布幻灯片(和其他实体)。已发布的幻灯片和版本在 pp_published_slides 表中设置。并且整个发布对象保存在pp_publish中。
上面的 SQL 将加载一个幻灯片对象,并包含有关最新版本、发布时间等的额外数据。
这是一个 sqlfiddle http://sqlfiddle.com/#!2/902fb4/1
任何帮助将不胜感激,有点在我的 SQL 知识的限制......