簡體   English   中英

SQL查詢中函數的左外部聯接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM