首页 > 解决方案 > 如何使用子查询优化连接查询

问题描述

如何优化此连接查询?如何在此查询中获取最新的 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

标签: mysqlsql

解决方案


推荐阅读