欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mysql 如何实现多张无关联表查询数据并分页

程序员文章站 2022-04-03 21:40:29
mysql 多张无关联表查询数据并分页功能需求在三张没有主外键关联的表中取出自己想要的数据,并且分页。数据库表结构水果表:坚果表:饮料表:数据库随便建的,重在方法。主要使用union all 操作符u...

mysql 多张无关联表查询数据并分页

功能需求

在三张没有主外键关联的表中取出自己想要的数据,并且分页。

数据库表结构

水果表:

Mysql 如何实现多张无关联表查询数据并分页

坚果表:

 Mysql 如何实现多张无关联表查询数据并分页

饮料表:

Mysql 如何实现多张无关联表查询数据并分页

数据库随便建的,重在方法。

主要使用union all 操作符

union all 操作符用于合并两个或多个 select 语句的结果集。

请注意,union all内部的 select 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 select 语句中的列的顺序必须相同 ; 另外,union all结果集中的列名总是等于 union all中第一个 select 语句中的列名。

// 详细sql语句
select * from
(
	(select fid,fname,price,type from fruits)
	union all
	(select nid,name,price,6 as type from nut)
	union all
	(select did,dname,price,7 as type from drinks)
	
) as fnd limit 0,10     -----fnd为表的别名

最终结果

Mysql 如何实现多张无关联表查询数据并分页

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。