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 如何分析查询性能
May 12 MySQL
详解MySQL的Seconds_Behind_Master
May 18 MySQL
MYSQL 无法识别中文的永久解决方法
Jun 03 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
SQL基础的查询语句
Nov 11 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 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
星际争霸秘籍
2020/03/04 星际争霸
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
js实现div色块碰撞
2020/01/16 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
详解python3中的真值测试
2018/08/13 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
pytorch forward两个参数实例
2020/01/17 Python
python 实现多维数组(array)排序
2020/02/28 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
小学生运动会通讯稿
2014/09/23 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
学生检讨书范文
2014/10/30 职场文书
公司借条范本
2015/05/25 职场文书
Python中的程序流程控制语句
2022/02/24 Python
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python
移除Selenium中window.navigator.webdriver值
2022/06/10 Python