精华内容
下载资源
问答
  • sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程 sqlserver 支持多表联合查询分页存储过程
  • 分页查询和多表联合查询1.分页查询普通查询select * from user分页查询基础:使用sql的limit关键字进行分页查询缺陷:并不是所有数据库都使用limit进行分页查询的,因此这条语句不通用SELECT * FROM table LIMIT ...

    分页查询和多表联合查询

    1.分页查询

    普通查询

    select * from user

    分页查询基础:使用sql的limit关键字进行分页查询

    缺陷:并不是所有数据库都使用limit进行分页查询的,因此这条语句不通用

    SELECT * FROM table LIMIT [offset,] rows---->从第offset开始查询出rows条数据

    select * from user LIMIT [offset,] rows

    利用RowBounds实现通用分页

    //在普通查询的基础上,改变java中的语句(调用Mapper部分做一些修改)

    RowBounds rowBounds=new RowBounds(offset,rows);

    User user = session.selectList("com.whether.mapper.UserMapper.findAll",null,rowBounds);

    使用分页插件pageHelper(不推荐)

    2.多表联合查询

    多对一、一对多(不需要中间表)

    一.创建表

    //创建Teacher表

    SET NAMES utf8mb4;

    SET FOREIGN_KEY_CHECKS = 0;

    DROP TABLE IF EXISTS `teacher`;

    CREATE TABLE `teacher` (

    `id` int(10) NOT NULL AUTO_INCREMENT,

    `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,

    PRIMARY KEY (`id`) USING BTREE

    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

    INSERT INTO `teacher` VALUES (1, '赵老师');

    INSERT INTO `teacher` VALUES (2, '刘老师');

    SET FOREIGN_KEY_CHECKS = 1;

    //创建Student表

    SET NAMES utf8mb4;

    SET FOREIGN_KEY_CHECKS = 0;

    DROP TABLE IF EXISTS `student`;

    CREATE TABLE `student` (

    `id` int(10) NOT NULL AUTO_INCREMENT,

    `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,

    `tid` int(10) NULL DEFAULT NULL,

    PRIMARY KEY (`id`) USING BTREE,

    INDEX `tid`(`tid`) USING BTREE,

    CONSTRAINT `student_ibfk_1` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT

    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

    INSERT INTO `student` VALUES (1, '小明', 1);

    INSERT INTO `student` VALUES (2, '小红', 1);

    INSERT INTO `student` VALUES (3, '小王', 1);

    INSERT INTO `student` VALUES (4, '小张', 2);

    INSERT INTO `student` VALUES (5, '小李', 2);

    INSERT INTO `student` VALUES (6, '小秦', 1);

    SET FOREIGN_KEY_CHECKS = 1;

    二.创建实体类Student/Teacher---每一个学生都有一个老师,这里关注学生

    @Getter

    @Setter

    @ToString

    @NoArgsConstructor

    @AllArgsConstructor

    public class Student {

    private int id;

    private String name;

    //学生需要关联一个老师

    private Teacher teacher;

    }

    @Getter

    @Setter

    @ToString

    @NoArgsConstructor

    @AllArgsConstructor

    public class Teacher {

    private int id;

    private String name;

    }

    三.编写Mapper

    多对一(多个学生对应一个老师,查询结果与一对一相似)

    public interface StudentMapper {

    //查询所有学生信息,以及对应的老师信息---联表查询

    List finAllStudent();

    //查询所有学生信息,以及对应的老师信息---嵌套查询(子查询)

    List finAllStudent2();

    }

    嵌套查询(子查询---推荐使用)

    实际上这是两个查询,在第一个查询的基础上,再进行一次查询,将第二次查询的结果注入到某一部分比如下面的案例,先查询所有的学生,然后根据查询到的tid列,再次进行教师信息查询,将这两部分查询到的信息映射到Student,其实就是在第一个查询的基础上,再进行第二个查询,将第二个查询的结果插入到某一个字段中进行输出

    select * from student

    select * from teacher WHERE id=#{id}

    联表查询

    select s.id sid,s.name sname,s.tid tid,t.name tname

    from student s left join teacher t on s.tid=t.id

    一对多(一个老师对应多个学生,这里关注老师)

    实体类修改

    public class Teacher {

    private int id;

    private String name;

    //一个老师对应多个学生

    private List students;

    }

    public class Student {

    private int id;

    private String name;

    private int tid;

    }

    public interface TeacherMapper {

    Teacher findTeacherById(@Param("tid") int id);

    Teacher findTeacherById2(@Param("tid") int id);

    }

    /p>

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    select s.id sid,s.name sname,t.id tid,t.name tname

    from student s,teacher t

    WHERE s.tid=t.id and t.id=#{tid}

    select * from teacher WHERE id=#{tid}

    select * from student where tid=#{id}

    多对多(需要中间表)

    下面是一个博客查询的案例,每一篇文章有一个或者多个标签,同时一个标签有一篇或者多篇文章

    文章表content中包含了文章id、文章内容......,中间表content_meta包含了文章id,对应的标签id,标签表metas包含了标签id、标签名

    查询过程:先查找所有的文章,然后根据查询出来的文章id,去中间表查询出标签的id,再根据标签的id找出对应标签名

    select m.name from content_meta cm,metas m WHERE cm.mid=m.mid AND m.type='tag' AND cm.cid=#{cid}

    SELECT * FROM content

    展开全文
  • 1.entity层要写个Vo实体类2.controller@AutoLog(value = "员工CURD-分页列表查询")@ApiOperation(value="员工CURD-分页列表查询", notes="员工CURD-分页列表查询")@GetMapping(value = "/list")public Result>...

    1.entity层要写个Vo实体类

    2.controller

    @AutoLog(value = "员工CURD-分页列表查询")

    @ApiOperation(value="员工CURD-分页列表查询", notes="员工CURD-分页列表查询")

    @GetMapping(value = "/list")

    public Result> queryPageList(EmployeeVo employee,

    @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,

    @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,

    HttpServletRequest req) {

    //QueryGenerator.initQueryWrapper是jeecg-boot封装的查询,默认支持所有复杂的检索查询

    QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(employee, req.getParameterMap());

    Page page = new Page(pageNo, pageSize);

    //自定义getAll接口

    IPage pageList=employeeService.getAll1(page,queryWrapper);

    return Result.ok(pageList);

    }

    3.servlce

    @Service

    public class EmployeeServiceImpl extends ServiceImpl implements IEmployeeService {

    @Resource

    private EmployeeMapper employeeMapper;

    @Override

    public IPage getAll1(Page page, QueryWrapper queryWrapper) {

    return employeeMapper.findByPage(page,queryWrapper);

    }

    }

    4.mapper.java

    public interface EmployeeMapper extends BaseMapper{/*** mybatis-plus多表查询

    *@parampage

    *@paramwrapper

    *@return

    *///参数加上@Param(Constants.WRAPPER),xml里加上${ew.customSqlSegment}可以实现复杂条件检索查询

    IPage findByPage(IPage page, @Param(Constants.WRAPPER) Wrapperwrapper);

    }

    5.mapper.xml

    select employee.*,department.dep_name from employee left join department

    on employee.sys_org_code = department.id ${ew.customSqlSegment}

    6.查询出来的结果

    {

    "success": true,

    "message": "操作成功!",

    "code": 200,

    "result": {

    "records": [

    {

    "createTime": "2020-10-14 16:35:36",

    "sex": "女",

    "name": "helloTest",

    "updateTime": "2020-10-14 16:41:41",

    "id": "1316296704307597313",

    "depName": "研发部",//这个是部门表中的字段,同过两表联查查询出来的

    "age": 23,

    "hobby": "打牌"

    },

    {

    "createTime": "2020-08-01 16:50:04",

    "sex": "男",

    "name": "萨芬",

    "updateTime": "2020-09-17 16:50:07",

    "id": "2",

    "depName": "人事部",

    "age": 12,

    "hobby": "阿斯顿"

    }

    ],

    "total": 2,

    "size": 10,

    "current": 1,

    "orders": [],

    "optimizeCountSql": true,

    "hitCount": false,

    "searchCount": true,

    "pages": 1

    },

    "timestamp": 1602729521729

    }

    展开全文
  • Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象;数据总条数正确,但有些记录多了,有些记录却又少了甚至没了。针对这个问题找了好久,最后发现是由于多个排序字段不...
    Mybatis oracle多表联合查询分页数据重复的问题

    多表联合查询分页获取数据时出现一个诡异的现象;数据总条数正确,但有些记录多了,有些记录却又少了甚至没了。针对这个问题找了好久,最后发现是由于多个排序字段不唯一,同样的排序顺序每次运行返回的结果顺序不一致,导致这样的现象出现。

    SELECT TEMP_.*
      FROM (select temp.*, ROWNUM ROWNUM_
              from (SELECT
                           t2.ID
                      FROM tableA t, tableB t2
                     WHERE t.ID = t2.AID
                       and t2.STATUS != '001'
                     ORDER BY t.CREATE_TIME DESC, t2.MIN_VALUE ASC) temp
             where ROWNUM <= 10) TEMP_
     WHERE ROWNUM_ > 0
    增加排序的唯一性,修改为

    SELECT TEMP_.*
      FROM (select temp.*, ROWNUM ROWNUM_
              from (SELECT
                           t2.ID
                      FROM tableA t, tableB t2
                     WHERE t.ID = t2.AID
                       and t2.STATUS != '001'
                     ORDER BY t.CREATE_TIME DESC, t2.MIN_VALUE ASC, t2.ID) temp
             where ROWNUM <= 10) TEMP_
     WHERE ROWNUM_ > 0






    本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/6287830.html,如需转载请自行联系原作者
    展开全文
  • 言归正传 JEECG框架自带的查询确实很省事,但是多表联合查询 分页查询 是我们开发业务系统当中不可避免的这时框架显得有点不太靠得住了 那我们就自己动手丰衣足食 使用minidao封装自己得查询sql吧 Controller ...

    JEECG确实是一款实实在在的促进生产力的工具好处我想看到此文章的人应该都有所体会了

    言归正传 JEECG框架自带的查询确实很省事,但是多表联合查询 分页查询 是我们开发业务系统当中不可避免的这时框架显得有点不太靠得住了 那我们就自己动手丰衣足食

    使用minidao封装自己得查询sql吧

    Controller

    MiniDaoPage<PersonEntity> rlt = this.personService.getpersonInfo(personModel, dataGrid);

    ServiceImpl.java

    @Override
        public MiniDaoPage<PersonEntity> getPersonInfo(PersonEntity personModel, DataGrid dataGrid) throws Exception {
    
            int page = 0;
            int queryPage = (dataGrid.getPage() - 1) * dataGrid.getRows();
            int rows = dataGrid.getRows();
    
            MiniDaoPage<PersonEntity> rlt = new MiniDaoPage<PersonEntity>();
            rlt.setPage(dataGrid.getPage());
            rlt.setRows(dataGrid.getRows());
            rlt.setTotal(PersonDao.getPersonPageCount(personModel));
            rlt.setResults(PersonDao.getPersonInfo(personModel, queryPage, page, rows));
            return rlt;
        } 

    PersonDao 

    @Arguments({"personModel", "queryPage", "page", "rows"})
         @ResultType(PersonEntity.class)
         public List<PersonEntity> getPersonInfo(@Param("personModel") PersonEntity personModel, @Param("queryPage")  int queryPage,@Param("page")  int page, @Param("rows") int rows);

    sql

    select * from person
    where 1=1
        <#if personModel.name? exists &&personModel.name ?length gt 0>
            and name like CONCAT('%', :personModel.name,'%') 
        </#if>
    order by name
    limit :queryPage, :rows 

     

    转载于:https://www.cnblogs.com/codedreams/p/9954345.html

    展开全文
  • 在项目中,多表联合查询是最常见的情景之一,在多表联合查询同时进行分页查询时,可能会出现查询结果条数不正确的情况或者说查询结果有遗漏的情况。针对这种问题,本文将探讨其解决方案。 解决办法为使用子查询的...
  • 在涉及到多表联合查询分页时,所需要注意的是最内层,即是联合查询的视图部分 查询记录的条数: select count(*) as ct from email t ,sys_member m where t.sendMan=m.id and t.reMan=#reMan# 按条件进行分页...
  • 不支持多表查询分页。看了一下前台模板层支持get标签,支持多表查询,支持分页。刚好可以把这个功能搬到后台来使用。我们现在对get_model.class.php进行改造使他能支持多表查询分页,分享给大家一、打开phpcms\...
  • 不支持多表查询分页。 看了一下前台模板层支持get标签,支持多表查询,支持分页。刚好可以把这个功能搬到后台来使用。 我们现在对get_model.class.php进行改造使他能支持多表查询分页,分享给大家 <?php...
  • 分享一个好用的MySql多表联合按条件查询查询分页排序存储过程: -- ---------------------------- -- Procedure structure for `pPage` -- ---------------------------- DROP PROCEDURE IF EXISTS `pPage`; ...
  • 主要介绍了MyBatis-Plus多表联合查询并且分页(3表联合),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • sqlserver多表联合查询和多表分页查询的代码讲解发布时间:2020-05-14 14:42:07来源:亿速云阅读:700作者:Leah这篇文章主要为大家详细介绍了sqlserver多表联合查询和多表分页查询的方法,图文详解容易学习,配合...
  • 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...
  • 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...
  • 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...
  • 这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表联合查询分页的实现,我以Web的...
  • Java的MyBatis框架中实现多表连接查询和查询结果分页 实现多表联合查询 还是在david.mybatis.model包下面新建一个Website类,用来持久化数据之用,重写下相应toString()方法,方便测试程序之用。 package david....
  • 假设有6张表,A是主业务,另外5张含有需要共同展示的信息,联合查询并且分页,当数据量大时会同时锁定6张表,造成服务挂起,请问有什么优化办法? sql应该啊怎么写比较好 (假设不能在A加冗余字段) 谢谢

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 454
精华内容 181
关键字:

多表联合查询分页