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條件是非唯一字...