oracel實際開發中,經常遇到這樣的狀況,兩個表作外關聯時,同時想對被關聯表進行條件限制,容易出錯,故在此總結下。
例項:sql1:
select count(*)
from econtract.cm_contracts_single_v smcon,
base.bas_regions_v reg ,
base.bas_regions_v off
where reg.region_id(+) = smcon.region
and smcon.office = off.region_id(+)
and reg.enable_flag(+) = 'y'
and off.enable_flag(+) = 'y'
and off.region_type(+) = 3
and reg.region_type(+) = 2
;sql2:
select count(*)
from econtract.cm_contracts_single_v smcon,
base.bas_regions_v reg ,
base.bas_regions_v off
where reg.region_id(+) = smcon.region
and smcon.office = off.region_id(+)
and reg.enable_flag= 'y'
and off.enable_flag = 'y'
and off.region_type = 3
and reg.region_type = 2
;加粗部分為被外關聯表的過濾條件。
二者的區別一看 就是過濾條件的寫法不一樣。
實質區別為:sql1 不影響主表的查詢總數:是對被關聯表自身資料進行條件過濾.
sql2 影響主表的查詢總數:是對主表與外表作關聯後的資料 進行條件過濾.
Oracle巧取指定記錄以及巧用外關聯查詢
如何取得表中第6到第10條記錄的值。第一種方法,使用minus語句 假設ddl語句如下 create table t id varchar2 4 primary key,value int 那麼第一種方法就是取出前5條,再取出前10條,然後採用集合運算的方法把前10條減去前5條就ok了,sql語句如...
Orcle 內外關聯與 號作用
1.外關聯 左關聯 left join 返回包括左表中的所有記錄和右表中聯結字段相等的記錄。右關聯 right join 返回包括右表中的所有記錄和左表中聯結字段相等的記錄。全外關聯 full join 兩個表的記錄都返回,不聯結的字段補null。內關聯 自關聯 inner join 只返回兩個表中...
巧取指定記錄與外關聯查詢
1 取得表中第6到第10條記錄的值 1.1 第一種方法,使用minus語句 假設ddl語句如下 create table t id varchar2 4 primary key,value int 那麼第一種方法就是取出前5條,再取出前10條,然後採用集合運算的方法把前10條減去前5條就ok了,sq...