У меня есть запрос MySQL, который я оптимизировал, и в настоящее время он имеет 2 зависимых/коррелированных подзапроса.MySQL - могу ли я избежать этих зависимых/зависимых подзапросов?
Мне было интересно, можно ли писать, чтобы избежать этого?
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 знания ....
Matt, пожалуйста, обновите то, что вы хотите достичь, то есть какой результат вы хотите получить от этих запросов. Так что может быть совсем другой способ. – Akhil
Не используйте «SELECT *». Назовите и правильно квалифицируйте каждый из столбцов, которые вы действительно хотите вернуть. – Strawberry
Помимо этого, они кажутся двумя разными запросами. Вы уверены, что законно объединить их как один? Если да, тогда рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли более легко реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый результирующий набор, соответствующий информации, представленной на шаге 1. – Strawberry