返回顶部
首页 > 资讯 > 数据库 >使用oracle怎么实现一对多数据分页查询筛选
  • 728
分享到

使用oracle怎么实现一对多数据分页查询筛选

2024-04-02 19:04:59 728人浏览 安东尼
摘要

使用oracle怎么实现一对多数据分页查询筛选?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先来看下第一次sql是如何写的查询之后在外面做

使用oracle怎么实现一对多数据分页查询筛选?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

先来看下第一次sql是如何写的

查询之后在外面做分页,很正常的逻辑,但是大家都发现了,这是一个多表查询,而且是一对多关系,这就有点问题了

先来看一个图

使用oracle怎么实现一对多数据分页查询筛选 

问题出现在哪呢?

1、需要对主表做分页数据查询,  如:

    limit 1,10 SELECT * FROM (SELECT A.* ,ROWNUM R FROM (select _ from car) A WHERE ROWNUM <= ${limitEnd} ) B WHERE R >= ${limitStart} ]

以上是对上表做数据统计,然后分页,

2、根据传入字段做筛选,如:车辆的座位数,排量,

出现的问题

因为业务数据庞大,一对多关系数据冗余,出现数据偏移

主要解决思路如下

嗯,下来个图示吧

使用oracle怎么实现一对多数据分页查询筛选 

1、对子表合并,做行转列, 2、在主表做分页筛选时就不会出现,因为一对多关系数据冗余,出现数据偏移

SELECT * FROM (SELECT A.* ,ROWNUM R FROM (
 
   select
    T_CAR."ID" as car_ID , T_CAR."CAR_NAME" as car_CAR_NAME , T_CAR."VIN_NUMBER"
    as car_VIN_NUMBER ,car_label.label_ids
   FROM T_CAR
    left join (select CAR_ID,wm_concat(LABLE_ID) as label_ids from T_Car_label group by CAR_ID) car_label on car_label.CAR_ID = T_CAR.ID
    where FIND_IN_SET('4aa06d2b9e904fe8bfeba3505c5dad6a',label_ids)=1
  ) A WHERE ROWNUM <=10 ) B WHERE R >=

FIND_IN_SET:由于写在sql里的筛选很繁琐,此方法是一个储存函数 这个实现不是很好

此函数在Mysql下有定义,但是此处因为与业务相关,内部做了一些更改

具体修改是当传进了一个{1,2,3,4}格式的数据时也可以做出条件筛选

create or replace FUNCTioN FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')
RETURN NUMBER IS 
 l_idx_a number:=0; -- 用于计算piv_str1中分隔符的位置
 l_idx_b number:=0; -- 用于计算piv_str2中分隔符的位置
 str_a  varchar2(4000); -- 根据分隔符截取的子字符串
 str_b  varchar2(4000); -- 根据分隔符截取的子字符串
 piv_str_a varchar2(4000) := piv_str1; -- 将piv_str1赋值给piv_str_a
 piv_str_b varchar2(4000) := piv_str2; -- 将piv_str2赋值给piv_str_b
 res  number:=0; -- 返回结果
BEGIN
-- 如果piv_str_a中没有分割符,直接循环判断piv_str_a和piv_str_b是否相等,相等 res=1
IF instr(piv_str_a, p_sep, 1) = 0 THEN
 -- 如果piv_str2中没有分割符,直接判断piv_str1和piv_str2是否相等,相等 res=1
   IF instr(piv_str_b, p_sep, 1) = 0 THEN
    IF piv_str_a = piv_str_b THEN
     res:= 1;
    END IF;
   ELSE
   -- 循环按分隔符截取piv_str_b
   LOOP
    l_idx_b := instr(piv_str_b,p_sep);
   -- 当piv_str中还有分隔符时
     IF l_idx_b > 0 THEN
    -- 截取第一个分隔符前的字段str
      str_a:= substr(piv_str_b,1,l_idx_b-1);
    -- 判断 str 和piv_str_a 是否相等,相等 res=1 并结束循环判断
      IF str_a = piv_str_a THEN
      res:= 1;
      EXIT;
      END IF;
     piv_str_b := substr(piv_str_b,l_idx_b+length(p_sep));
     ELSE
    -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
     IF piv_str_a = piv_str_b THEN
      res:= 1;
     END IF;
     -- 无论最后是否相等,都跳出循环
     EXIT;
     END IF;
   END LOOP;
   -- 结束循环
   END IF;
ELSE
-- 循环按分隔符截取piv_str_a
LOOP
 l_idx_a := instr(piv_str_a,p_sep);
-- 当piv_str_a中还有分隔符时
  IF l_idx_a > 0 THEN
 -- 截取第一个分隔符前的字段str
   str_a:= substr(piv_str_a,1,l_idx_a-1);
   -- 如果piv_str_b中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1
   IF instr(piv_str_b, p_sep, 1) = 0 THEN
    -- 判断 str_a 和piv_str_b 是否相等,相等 res=1 并结束循环判断
      IF str_a = piv_str_b THEN
      res:= 1;
      EXIT;
      END IF;
   ELSE
   -- 循环按分隔符截取piv_str_b
   LOOP
    l_idx_b := instr(piv_str_b,p_sep);
   -- 当piv_str中还有分隔符时
     IF l_idx_b > 0 THEN
    -- 截取第一个分隔符前的字段str
      str_b:= substr(piv_str_b,1,l_idx_b-1);
    -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断
      IF str_b = str_a THEN
      res:= 1;
      EXIT;
      END IF;
     piv_str_b := substr(piv_str_b,l_idx_b+length(p_sep));
     ELSE
    -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
     IF piv_str_a = piv_str_b THEN
      res:= 1;
     END IF;
     -- 无论最后是否相等,都跳出循环
     EXIT;
     END IF;
   END LOOP;
   -- 结束循环
   END IF;
  piv_str_a := substr(piv_str_a,l_idx_a+length(p_sep));
  ELSE
 -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1
  IF piv_str_a = piv_str_b THEN
   res:= 1;
  END IF;
  -- 无论最后是否相等,都跳出循环
  EXIT;
  END IF;
END LOOP;
-- 结束循环
END IF;
-- 返回res
RETURN res;
END FIND_IN_SET;

关于使用oracle怎么实现一对多数据分页查询筛选问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: 使用oracle怎么实现一对多数据分页查询筛选

本文链接: https://lsjlt.com/news/55612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用oracle怎么实现一对多数据分页查询筛选
    使用oracle怎么实现一对多数据分页查询筛选?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先来看下第一次sql是如何写的查询之后在外面做...
    99+
    2024-04-02
  • 使用jquery实现分页查询数据
    随着 Web 技术的不断发展,越来越多的网站需要支持分页查询数据功能。而 jQuery 是一种非常流行的 JavaScript 库,能够帮助开发人员更加方便地操作 DOM、事件、动画等方面,因此使用 jQuery 实现分页查询数据是一个不错...
    99+
    2023-05-14
  • MyBatis中怎么实现一对多查询和多对一查询
    这篇“MyBatis中怎么实现一对多查询和多对一查询”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MyBatis中怎么实现一...
    99+
    2023-06-29
  • 怎么使用C#中的DataTable实现筛选查询
    这篇文章主要讲解了“怎么使用C#中的DataTable实现筛选查询”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用C#中的DataTable实现筛选查询”吧!说明:DataTable进...
    99+
    2023-07-06
  • oracle怎么实现分页查询
    在Oracle中,可以通过使用ROWNUM和子查询来实现分页查询。以下是一个示例:```sqlSELECT * FROM (SELECT column1, column2, ..., ROWNUM AS rnFROM y...
    99+
    2023-08-11
    oracle
  • MySQL怎么实现数据分页查询
    在MySQL中,可以使用LIMIT子句来实现数据分页查询。LIMIT子句用于限制查询结果返回的行数,可以指定返回的起始行和总行数。 ...
    99+
    2024-05-24
    mysql
  • 怎么使用PHP编写数据库查询筛选语句
    这篇“怎么使用PHP编写数据库查询筛选语句”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用PHP编写数据库查询筛选语句...
    99+
    2023-07-06
  • 数据库中怎么实现分页查询
    数据库中怎么实现分页查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、 MySQL 数据库分页查询 MySQL数据库实现分...
    99+
    2024-04-02
  • 在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询
    在SpringMVC中使用Mybatis怎么实现对Mysql数据库进行分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一步,搭建这个小案例,引入spring和mybti...
    99+
    2023-05-31
    springmvc mybatis mysql
  • Mybatis怎么实现一对一、一对多关联查询
    今天小编给大家分享一下Mybatis怎么实现一对一、一对多关联查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Mybati...
    99+
    2023-07-05
  • Cassandra中怎么实现数据的分页查询
    在Cassandra中实现数据的分页查询可以通过使用CQL(Cassandra Query Language)语句结合使用LIMIT...
    99+
    2024-03-11
    Cassandra
  • mybatis一对多数据怎么查询封装
    在MyBatis中,可以使用嵌套查询或者嵌套结果映射来实现一对多数据的查询和封装。 嵌套查询:可以使用MyBatis的associ...
    99+
    2023-10-27
    mybatis
  • SQLServer和Oracle中怎么实现分页查询
    本篇文章为大家展示了SQLServer和Oracle中怎么实现分页查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.分页算法 最开始我在网上查找资料的...
    99+
    2024-04-02
  • oracle+mybatis-plus+springboot怎么实现分页查询
    本篇内容主要讲解“oracle+mybatis-plus+springboot怎么实现分页查询”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle+mybatis-plus+springb...
    99+
    2023-06-20
  • mybatis一对多嵌套查询怎么实现
    本文小编为大家详细介绍“mybatis一对多嵌套查询怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis一对多嵌套查询怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。mybatis一对多嵌...
    99+
    2023-07-05
  • SQL中怎么实现数据分页查询操作
    这篇文章给大家介绍SQL中怎么实现数据分页查询操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。方法一: select top 5 *...
    99+
    2024-04-02
  • php中mongodb怎么实现大数据分页查询
    在PHP中使用MongoDB进行大数据分页查询,可以通过使用skip()和limit()方法来实现。 示例代码如下: <php...
    99+
    2024-04-12
    php mongodb
  • 使用Mybatis 如何实现多对一或一对多的关联查询
    使用Mybatis 如何实现多对一或一对多的关联查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先  数据库量表之间字段关系(没有主外键)studentmaj...
    99+
    2023-05-31
    mybatis 一对多 多对一
  • Oracle使用MyBatis中RowBounds实现分页查询功能
    Oracle中分页查询因为存在伪列rownum,sql语句写起来较为复杂,现在介绍一种通过使用MyBatis中的RowBounds进行分页查询,非常方便。 使用MyBatis中的RowBounds进行分页查...
    99+
    2024-04-02
  • Mybatis使用@one和@Many实现一对一及一对多关联查询
    目录一、准备工作1.创建springboot项目,项目结构如下2.添加pom.xml配置信息3.配置相关信息二、使用@One注解实现一对一关联查询三、使用@Many注解实现一对多关联...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作