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基础(一)
Apr 05 MySQL
mysql优化
Apr 06 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 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
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP中的self关键字详解
2019/06/23 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
跟老齐学Python之重回函数
2014/10/10 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
python编程实现希尔排序
2017/04/13 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
python中列表的含义及用法
2020/05/26 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
机电一体化专业应届生求职信
2013/11/27 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers