Mysql在union all 之后order by 失效

//不正常的sql
SELECT
    *
FROM
    (
        (
        SELECT
            `class`.`id` as class_id,
            `class`.`name` as class_name,
            `class`.`start_time` AS `startTime`,
            `class_group`.`group_name`,
            `class_group`.`id` AS group_id 
        FROM
            `class`
            LEFT JOIN class_group ON `class_group`.`class_id` = `class`.`id` 
        WHERE
            `class`.`app_id` = 007cd3983760 
            AND `class_group`.`app_id` = 007cd3983760 
            AND `class_group`.`deleted_at` IS NULL 
            AND `class`.`deleted_at` IS NULL 
            AND class.start_time >= 2021-08-03 
            AND class.start_time <= 2021-08-20 
            order by class.name asc,group_id asc
        ) UNION all
        (
        SELECT
            `class`.`id` as class_id,
            `class`.`name` as class_name,
            `class`.`start_time` AS `startTime`,
            ,
          0
        FROM
            class 
        WHERE
            deleted_at IS NULL 
            AND app_id = 007cd3983760 
            AND class.start_time >= 2021-08-03 
            AND class.start_time <= 2021-08-20 
        ) 
    ) AS class_group_list 
ORDER BY
class_name ASC 
    LIMIT 1,
    20

不正常的结果,class_name排序是对了,但是最后一列的group_id不对,按说是group_id = 0的在每个class_name相同组的最前面

 

Mysql在union all 之后order by 失效

 

解决问题:

//有效的sql
    select * from (    
        SELECT
            `class`.`id` as class_id,
            `class`.`name` as class_name,
            `class`.`start_time` AS `startTime`,
            ,
          0  as group_id
        FROM
            class 
        WHERE
            deleted_at IS NULL 
            AND app_id = 007cd3983760 
            AND class.start_time >= 2021-08-03 
            AND class.start_time <= 2021-08-20
UNION all
SELECT
            `class`.`id` as class_id,
            `class`.`name` as class_name,
            `class`.`start_time` AS `startTime`,
            `class_group`.`group_name`,
            `class_group`.`id` AS group_id 
        FROM
            `class`
            LEFT JOIN class_group ON `class_group`.`class_id` = `class`.`id` 
        WHERE
            `class`.`app_id` = 007cd3983760 
            AND `class_group`.`app_id` = 007cd3983760 
            AND `class_group`.`deleted_at` IS NULL 
            AND `class`.`deleted_at` IS NULL 
            AND class.start_time >= 2021-08-03 
            AND class.start_time <= 2021-08-20 
         ) cc order by class_name asc ,group_id asc

有效的结果

Mysql在union all 之后order by 失效

 

Mysql在union all 之后order by 失效

上一篇:在ubuntu 14.04上安装2.6的内核


下一篇:linux install mysql & errors solutions