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执行过程以及顺序
May 12 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
mysql left join快速转inner join的过程
Jun 30 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
一篇文章看懂MySQL主从复制与读写分离
Nov 07 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
Mysql调整优化之四种分区方式以及组合分区
Apr 13 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性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
php生成HTML文件的类方法
2019/10/11 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python中super函数的用法
2017/11/17 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
django 中QuerySet特性功能详解
2019/07/25 Python
wxPython实现整点报时
2019/11/18 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
python定义类的简单用法
2020/07/24 Python
餐饮商业计划书范文
2014/04/29 职场文书
中国梦读书活动总结
2014/07/10 职场文书
考试作弊检讨
2015/01/27 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python