gpt4 book ai didi

MySQL - 我可以避免这些相关/依赖子查询吗?

转载 作者:行者123 更新时间:2023-11-29 12:39:47 24 4
gpt4 key购买 nike

我有一个一直在优化的 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 知识......

最佳答案

下面的示例显示了在没有相关子查询的情况下重写的部分查询...

SELECT s.*
, c.*
FROM slides s
JOIN slide_content c
ON c.slide_id = s.id
JOIN ( SELECT slide_id, MAX(version) max_version FROM slide_content GROUP BY slide_id ) x
ON x.slide_id = c.slide_id
AND x.max_version = c.version
WHERE s.product_id = 2
AND s.country_code = 'gb';

关于MySQL - 我可以避免这些相关/依赖子查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26278054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com