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


Posted in MySQL onJune 05, 2021

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

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

MySQL 相关文章推荐
MySQL REVOKE实现删除用户权限
Jun 18 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
浅谈mysql增加索引不生效的几种情况
Jun 23 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL 数据类型详情
Nov 11 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
mysql 子查询的使用
Apr 28 MySQL
mysql性能优化以及配置连接参数设置
May 06 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 MySQL
Mysql数据库group by原理详解
Jul 07 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
Mysql中存储引擎的区别及比较
浅谈mysql返回Boolean类型的几种情况
Jun 04 #MySQL
Mysql 设置boolean类型的操作
Jun 04 #MySQL
MySQL中的布尔值,怎么存储false或true
mysql外连接与内连接查询的不同之处
Mysql systemctl start mysqld报错的问题解决
Jun 03 #MySQL
你知道哪几种MYSQL的连接查询
Jun 03 #MySQL
You might like
PHP学习之PHP变量
2006/10/09 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
Python实现简单的可逆加密程序实例
2015/03/05 Python
python如何爬取个性签名
2018/06/19 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
大学生个人简历中的自我评价
2013/12/27 职场文书
白血病捐款倡议书
2014/05/14 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
党校学习个人总结
2015/02/15 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
小学中队长竞选稿
2015/11/20 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技