避免笛卡爾積現象方式一

2021-06-19 08:06:26 字數 1810 閱讀 7327

1 主要sql語句

select *

from (

select row_.*,

rownum rownum_

from (

select matnr,

maktx,

lgort,

lgobe,

charg,

labst,

meins,

matkl,

wgbez,

brgew,

mtart,

gewei,

menge as qty,

holdqty

from rtl_inventory_freed ri

where exists

(select 'x'

from rtl_sys_permission_inv pi

where pi.tenantcode = ri.tenantcode

and pi.lgort = ri.lgort

and pi.werks = ri.werks

and pi.userid = :1

)and tenantcode = :2

and werks = :3

and vkorg = :4

and vtweg = :5

and datuv <= :6

and sortf >= :7

)row_

)where rownum_ between 1 and 50

2 檢視其執行

出現笛卡爾積現象

2  修改sql語句,加/*+ ordered */

select *

from (

select row_.*,

rownum rownum_

from (

select /*+ ordered */ matnr,

maktx,

lgort,

lgobe,

charg,

labst,

meins,

matkl,

wgbez,

brgew,

mtart,

gewei,

menge as qty,

holdqty

from rtl_inventory_freed ri

where exists

(select 'x'

from rtl_sys_permission_inv pi

where pi.tenantcode = ri.tenantcode

and pi.lgort = ri.lgort

and pi.werks = ri.werks

and pi.userid = :1

)and tenantcode = :2

and werks = :3

and vkorg = :4

and vtweg = :5

and datuv <= :6

and sortf >= :7

)row_

)where rownum_ between 1 and 50

2 檢視執行計畫

注:笛卡爾積現象消失。

總結:1 子查詢容易造成笛卡爾積現象

2 /*+ ordered */ 按在from從句中出現順序連線表

笛卡爾積現象

2.3 當兩張表進行連線查詢時,沒有任何條件的限制會發生什麼現象?案例 查詢每個員工所在部門名稱?select from emp select ename,dname from emp,dept 當兩張表進行連線查詢,沒有任何條件限制時,最終查詢結果條數,是兩張表條數的乘積 2.4 怎麼避免笛卡爾積...

避免笛卡爾積

在mysql中建立臨時表 create table temptable 2 instanceid numeric 30 celltype varchar 128 enodeb id numeric 30 eutrancell id numeric 30 engine myisam default c...

笛卡爾積現象解決

今天使用join.on進行多表連線查詢,使用的各個表中的id進行關聯,但是資料是不對的,出現了笛卡爾積現象。使用join相當於將表中資料進行了相乘,兩個表中的資料相當於a表中字段個數乘以b表中字段個數。查了相關帖子,使用join.on內連線就能解決,但是資料還是不對。連線查詢,如果on條件是非唯一字...