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 相关文章推荐
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
zabbix监控mysql的实例方法
Jun 02 MySQL
安装配置mysql及Navicat prenium的详细流程
Jun 10 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
详解MySQL的内连接和外连接
May 08 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执行sql语句的写法
2009/03/10 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php截取字符串函数分享
2015/02/02 PHP
详解YII关联查询
2016/01/10 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
json简单介绍
2008/06/10 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python 实现敏感词过滤的方法
2019/01/21 Python
详解python的argpare和click模块小结
2019/03/31 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
餐饮部总监岗位职责范文
2014/02/13 职场文书
年终总结会主持词
2014/03/25 职场文书
教师读书活动总结
2014/05/07 职场文书
学校志愿者活动总结
2014/06/27 职场文书
慰问信格式
2015/02/14 职场文书
创业计划书之美容店
2019/09/16 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript