mysql - 如何使用子查询优化连接查询
问题描述
如何优化此连接查询?如何在此查询中获取最新的 start_dt?有什么方法可以加快加载速度,而 start_dt 是最新的吗?如果我删除这种情况下的子查询,我会得到 start_dt 不是最新的记录。请帮忙!!
SELECT
matrix.matrix_uuid,
matrix.name AS matrix_name,
courses.courses_uuid,
courses.name AS courses_name,
employees.employees_uuid,
CONCAT(employees.first_name,
' ',
employees.last_name) AS Name,
courses.validity,
courses.duration,
(SELECT
MAX(start_dt)
FROM
courses_schedule C
WHERE
C.courses_schedule_uuid = CS.courses_schedule_uuid) AS start_dt,
COUNT(courses.courses_uuid) AS refresher,
courses.courses_refresher_uuid,
courses_taken.overall_status,
courses_taken.status
FROM
employees
INNER JOIN
courses_taken ON courses_taken.employees_uuid = employees.employees_uuid
LEFT JOIN
courses_schedule CS ON CS.courses_schedule_uuid = courses_taken.courses_schedule_uuid
LEFT JOIN
matrix_courses matrix_courses ON matrix_courses.courses_uuid = CS.courses_uuid
LEFT JOIN
matrix ON matrix.matrix_uuid = matrix_courses.matrix_uuid
LEFT JOIN
courses ON courses.courses_uuid = matrix_courses.courses_uuid
WHERE
CS.start_dt = (SELECT
MAX(start_dt)
FROM
courses_taken CT
LEFT JOIN
courses_schedule ON courses_schedule.courses_schedule_uuid = CT.courses_schedule_uuid
LEFT JOIN
matrix_courses matrix_courses ON matrix_courses.courses_uuid = courses_schedule.courses_uuid
LEFT JOIN
roles_courses ON roles_courses.courses_uuid = matrix_courses.courses_uuid
LEFT JOIN
matrix M ON M.matrix_uuid = matrix_courses.matrix_uuid
LEFT JOIN
courses C ON C.courses_uuid = matrix_courses.courses_uuid
WHERE
C.courses_uuid = courses.courses_uuid
AND M.matrix_uuid = matrix.matrix_uuid
GROUP BY matrix.matrix_uuid , courses.courses_uuid)
AND courses_taken.overall_status = 1
AND employees.status = 2
AND IFNULL(employees.STATUS, 1) != 0
GROUP BY matrix.matrix_uuid , courses.courses_uuid , employees.employees_uuid
解决方案
推荐阅读
- flutter - 错误:ADB 以退出代码 1 退出 - 补救措施?
- laravel - Gate Define 不适用于除 role_id 为 1 的其他用户
- cucumber - 嗨,我正在研究 Cucumber,我正在尝试生成 pdf 报告,在我的 porm 中,我添加了依赖项,但仍然显示缺少 ralfstuckert 错误
- video.js - 如何将音量级别添加到 videojs 7.9.6
- java - 将文本文件扫描成 3 个字符的子字符串
- node.js - 使用 NodeJS 首次尝试 AWS Amplify 时出现 404 页面未找到
- javascript - 无休止地滚动不同网站的多个页面
- powerbi - PowerBI - 根据另一个数据集中的日期范围创建日期表
- java - FF4J:特征存储的服务器端缓存
- ethereum - 使用分叉的 Kovan 链将合约部署到本地安全帽节点