zoukankan      html  css  js  c++  java
  • 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

    有效的结果

  • 相关阅读:
    android获得屏幕高度和宽度
    Android中RelativeLayout各个属性的含义
    Android JNI知识简介
    Android结束进程方法
    android开发中的图片资源问题
    android framework下public.xml中添加资源问题
    I'm back
    test,exec,match,replace方法区别 正则
    fiddler抓包工具 https抓取 ios手机端抓取
    前端优化方案
  • 原文地址:https://www.cnblogs.com/wt645631686/p/15194012.html
Copyright © 2011-2022 走看看