[英]Left outer join on a function in SQL query
我有一個列分配編號,該編號可以包含1298287 , 82727-2 , 8367-3,7363 etc
我正在使用正則表達式從這些數字中消除-2 -3來檢索人的號碼。 現在,消除這種情況后,我需要將此人號與另一個表中的人號進行比較。
當我為此使用聯接時,它將檢索較少的行數。 我在表xx_ass_table
有13000行,我需要work_stg
表中的雇主名稱和工人類型, work_stg
我需要將此正則表達式人編號與work_stg
人員編號相work_stg
。
select
assignment_name,
regexp_substr(assignment_name, '[0-9]+') person_number,
wrk.employer_name ,
wrk.TIME,
STEP_ENTRY_DATE ,
SYSTEM_PERSON_TYPE ,
WORK_ATHOME_FLAG ,
worker_category,
effective_start_date,
effective_end_date,
from
(select
xx_ass_table.*,
COUNT(*) OVER (PARTITION BY assignment_name,
effective_start_date,
effective_end_date,
effective_latest_change) as c
from xx_ass_table) t,
xx_work_stg wrk
where
regexp_substr(t.assignment_name(+), '[0-9]+') = wrk.person_number
and c = 1;
表xx_ass_table
人員人數不是ib工作關系表,這就是為什么我使用左xx_ass_table
原因。 但是此查詢返回4000行,而該查詢應返回13000行。
嘗試避免這種連接,並使用左外部連接的正確語法,但我不確定您是否正確放置了PLUS符號。 嘗試這個:
select assignment_name,
regexp_substr(assignment_name, '[0-9]+') person_number,
wrk.employer_name ,
wrk.TIME,
STEP_ENTRY_DATE ,
SYSTEM_PERSON_TYPE ,
WORK_ATHOME_FLAG ,
worker_category,
effective_start_date,
effective_end_date,
from (SELECT xx_ass_table.*,
COUNT(*) OVER (PARTITION BY assignment_name,
effective_start_date,
effective_end_date,
effective_latest_change) as c
from xx_ass_table) t
left outer join
xx_work_stg wrk
on regexp_substr(t.assignment_name, '[0-9]+')=wrk.person_number
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.