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 22 MySQL
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 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 常用类整理
2009/12/23 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
JS常用算法实现代码
2016/11/14 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
Python实现遍历数据库并获取key的值
2015/05/17 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
django的ORM操作 增加和查询
2019/07/26 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
资深生产主管自我评价
2013/09/22 职场文书
班组长工作职责
2013/12/25 职场文书
扬尘污染防治方案
2014/06/15 职场文书
民间借贷借条如何写
2015/05/26 职场文书
高一军训感想
2015/08/07 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
vue选项卡切换的实现案例
2022/04/11 Vue.js
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers