• 解决 mysql多表联合查询时出现的分页问题


    mysql一对多分页问题

    部门表:tbl_dept
    员工表:tbl_emp

    数据库sql文件

    
    
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm-crud` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    USE `ssm-crud`;
    
    /*Table structure for table `tbl_dept` */
    
    DROP TABLE IF EXISTS `tbl_dept`;
    
    CREATE TABLE `tbl_dept` (
      `dept_id` int(11) NOT NULL AUTO_INCREMENT,
      `dept_name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    
    /*Data for the table `tbl_dept` */
    
    insert  into `tbl_dept`(`dept_id`,`dept_name`) values 
    (1,'技术部'),
    (2,'业务部'),
    (6,'销售部'),
    (7,'人事部');
    
    /*Table structure for table `tbl_emp` */
    
    DROP TABLE IF EXISTS `tbl_emp`;
    
    CREATE TABLE `tbl_emp` (
      `emp_id` int(11) NOT NULL AUTO_INCREMENT,
      `emp_name` varchar(255) DEFAULT NULL,
      `emp_gender` char(1) DEFAULT NULL,
      `emp_email` varchar(255) DEFAULT NULL,
      `d_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`emp_id`),
      KEY `FK_tbl_emp` (`d_id`),
      CONSTRAINT `FK_tbl_emp` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`dept_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
    
    /*Data for the table `tbl_emp` */
    
    insert  into `tbl_emp`(`emp_id`,`emp_name`,`emp_gender`,`emp_email`,`d_id`) values 
    (1,'xiaoshen','2',NULL,6),
    (4,'晓明','1',NULL,1),
    (5,'xiaohong','2',NULL,2),
    (6,'xiaohei','2',NULL,6),
    (7,'xiaozhang','1',NULL,1),
    (8,'xiaogao','1',NULL,1),
    (9,'xiaohua','1',NULL,1),
    (10,'xiaoyan','2',NULL,1),
    (11,'xiaohai','2',NULL,2),
    (12,'xiaoqiang','1',NULL,6),
    (13,'xiaoqi','2',NULL,7);
    
    
    

    分页错误写法(主查询员工表)

    SELECT * FROM tbl_emp e
    LEFT JOIN 
    tbl_dept d
    
    ON d.dept_id  = e.d_id
    
    LIMIT 1,10
    
    
    

    使用子查询方式解决问题

    
    
    SELECT
            *
        FROM
         (
           SELECT
           *
            FROM
            tbl_emp e
            LEFT JOIN 
    	tbl_dept d
            ON d.dept_id  = e.d_id
            
            GROUP BY e.d_id
            LIMIT 1,10
    
         ) e
    
          LEFT JOIN tbl_dept d
            ON d.dept_id  = e.d_id
       
     
          
        
    


    下面代码与之无关 仅为备份



      SELECT
            ft.id,
            ft.partner_id AS partnerId,
            ft.code ,
            ft.end_update_date AS  endUpdateDate,
            ft.name ,
            ft.type ,
            ft.area ,
            ft.is_default AS  isDefault,
            fp.id fpId,
            fp.shop_id AS fpShopId  ,
            fp.provice_id AS fpProviceId ,
            fp.provice_name AS fpProviceName ,
            fp.start_num  AS fpStartNum ,
            fp.start_fee  AS fpStartFee ,
            fp.increase_num AS fpIncreaseNum ,
            fp.increase_fee AS fpIncreaseFee ,
            fp.code AS fpCode ,
            fp.provice_text AS  fpProviceText ,
            fp.template_id AS fpTemplateId
        FROM
         (
           SELECT
            f.id,
            f.partner_id ,
            f.code ,
            f.end_update_date  ,
            f.name ,
            f.type ,
            f.area ,
            f.is_default ,
    	    f.is_del,
    	    f.create_date
            FROM
            bus_freight_template f
            LEFT JOIN bus_freight_provice p
            ON f.id = p.template_id
            WHERE f.code = p.code
            AND f.code = #{code}
            GROUP BY f.id
            LIMIT #{startPage},#{pageSize}
    
         ) ft
    
          LEFT JOIN bus_freight_provice fp
            ON ft.id = fp.template_id
        WHERE ft.code = fp.code
          AND fp.template_id IS NOT NULL
          AND ft.code =  #{code}
          AND fp.is_del = '0'
          AND ft.is_del = '0'
    
          order by ft.create_date desc
    
  • 相关阅读:
    Java修饰符/关键字
    深入理解Java面向对象三大特性 封装 继承 多态
    BUG为什么越改越多,越改越乱
    DDMS调试Virtual Box android虚拟机
    android开发之android虚拟机配置
    使用cordova 出现Error: The provided path is not Android project.
    Javascript与Flex AS3的交互
    [Ljava.lang.String; cannot be cast to java.lang.String错误
    使用Flex4的PopUpManager的addPopUp() 方法弹出 removeChild异常的解决办法
    Flex 4 不同主题下容器子元素的管理方法
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154568.html
Copyright © 2020-2023  润新知