亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

oracle實現一對多數據分頁查詢篩選示例代碼

2024-08-29 14:01:21
字體:
來源:轉載
供稿:網友

前言

今天項目測試運行的時候,遇到了一個奇怪的問題,這個問題說起來按sql語法的話是沒有錯誤的

但是呢按照我們的業務來做區分就有些邏輯上的錯誤了,

下面請聽我慢慢道來,在數據庫中有兩個數據,

先來看下第一次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=1IF 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_aLOOP 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;-- 返回resRETURN res;END FIND_IN_SET;

然后完美解決

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲一区精品| 成人福利视频在线观看| 亚洲黄色在线看| 久久免费少妇高潮久久精品99| 欧美激情一级二级| 九色91av视频| 欧美综合第一页| 在线观看国产精品淫| 91在线视频成人| 亚洲人永久免费| 亚洲黄色www| 欧美另类极品videosbest最新版本| 亚洲国产天堂久久综合网| 欧美一区二区影院| 欧洲亚洲妇女av| 亚洲国产精品推荐| 2019精品视频| 亚洲男人av在线| 97热精品视频官网| 国产精品wwwwww| 91高清视频在线免费观看| 欧美日韩一区二区在线播放| 中文字幕日韩精品有码视频| 亚洲v日韩v综合v精品v| 日韩成人激情在线| 国产精品久久久久久av福利软件| 日韩中文字幕精品视频| 国产精品视频久久| 国产精品久久久久久久久久久久久久| 国产视频欧美视频| 国产精品影院在线观看| 日韩欧美国产一区二区| 7m第一福利500精品视频| 97超级碰碰人国产在线观看| 成人久久18免费网站图片| 国产成人jvid在线播放| 欧美一区在线直播| 国产精品福利无圣光在线一区| 韩剧1988在线观看免费完整版| 亚洲无av在线中文字幕| 亚洲精品久久久久中文字幕欢迎你| 国产日韩欧美中文在线播放| 亚洲第五色综合网| 68精品国产免费久久久久久婷婷| 日韩欧美一区二区三区| 欧美一乱一性一交一视频| 国产精品主播视频| 国产欧美va欧美va香蕉在线| 色综合伊人色综合网| 91成人在线视频| 亚洲精品一区在线观看香蕉| 57pao成人永久免费视频| 国产日韩欧美影视| 国产一区二区丝袜高跟鞋图片| 欧美一性一乱一交一视频| 国产精品盗摄久久久| 欧美插天视频在线播放| 亚洲精品美女久久久久| 欧美在线视频网站| 成人网在线免费看| 亚洲美女av在线播放| 国产精品1区2区在线观看| 亚洲缚视频在线观看| 在线观看欧美成人| 久久精品久久久久电影| 亚洲a级在线播放观看| 国产精品嫩草影院一区二区| 欧美日韩激情小视频| 97视频人免费观看| 色综合久久天天综线观看| 亚洲黄页网在线观看| 78m国产成人精品视频| 亚洲欧美激情视频| 亚洲影院高清在线| 国产精品欧美激情| 日韩精品极品视频免费观看| 亚洲精品美女视频| 久久成年人免费电影| 中文字幕日韩专区| 国产一区二区精品丝袜| 成人国产在线视频| 国产69精品久久久久久| 亚洲一区二区久久久久久| 欧美大人香蕉在线| 日韩欧美黄色动漫| 久久91亚洲精品中文字幕奶水| 成人久久一区二区三区| 国产精品久久久久久av福利软件| 亚洲欧洲日本专区| 成人欧美在线视频| 日韩精品在线视频观看| 97**国产露脸精品国产| 精品国产91久久久久久| 日韩成人中文电影| 国产不卡在线观看| 91大神福利视频在线| 亚洲精品久久7777777| 成人黄色网免费| 国产在线精品播放| 午夜精品视频在线| 欧美黄色三级网站| 91极品女神在线| 欧美国产视频一区二区| 亚洲一区中文字幕| 国产成人精品av在线| 欧美怡红院视频一区二区三区| 欧美黄色片视频| 国产欧美一区二区三区久久| 日韩极品精品视频免费观看| 亚洲精品www| 国产精品网站视频| 成人网在线免费观看| 欧美夜福利tv在线| 国产精品久久久久久久久久99| 国产精品一区二区三区成人| 日韩综合视频在线观看| 亚洲欧美中文日韩在线| 欧美成人精品h版在线观看| 国产精品福利无圣光在线一区| 日本精品一区二区三区在线| 国产精品草莓在线免费观看| 欧美激情极品视频| 亚洲精品成人久久电影| 国产精品wwww| 尤物yw午夜国产精品视频| 精品国产一区av| 综合欧美国产视频二区| 欧美巨大黑人极品精男| 日韩a**中文字幕| 91青草视频久久| 欧美成人精品三级在线观看| 国产精品久久久久久久久| 国产精品美女在线| 日本国产欧美一区二区三区| 久久五月情影视| 欧美理论电影在线观看| 成人免费看片视频| 91精品国产91久久| 久久国产精品久久精品| 97碰碰碰免费色视频| 性欧美在线看片a免费观看| 日韩精品www| 91成品人片a无限观看| 4444欧美成人kkkk| 亚洲第一福利网| 久久av.com| 欧美大片va欧美在线播放| 欧美精品一区三区| 国产一区二区在线播放| 久久精品视频99| 国产主播欧美精品| 人人澡人人澡人人看欧美| 日韩精品在线视频观看| 亚洲第一av网站| 国产成人一区二区| 亚洲一区二区三区四区在线播放| 欧美最顶级丰满的aⅴ艳星| 色与欲影视天天看综合网| 日韩精品久久久久| 中文国产成人精品久久一| 欧美国产在线视频| 日韩中文字幕网址| 91av在线看| 日韩av一区在线|