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 26 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MYSQL常用函数介绍
May 05 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 MySQL
Mysql如何查看是否使用到索引
Dec 24 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?(第三篇)
2009/03/19 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
详解Python中for循环的使用
2015/04/14 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
对Python中range()函数和list的比较
2018/04/19 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
详解python中@的用法
2019/03/27 Python
python实现AES加密和解密
2019/03/27 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
c语言常见笔试题总结
2016/09/05 面试题
《望庐山瀑布》教学反思
2014/04/22 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Python MNIST手写体识别详解与试练
2021/11/07 Python
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL