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相同组的最前面

 

 

解决问题:

//有效的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

有效的结果

 

posted @ 2021-08-27 15:39  温柔的风  阅读(560)  评论(0编辑  收藏  举报