我有一个列号分配编号可以包含1298287 , 82727-2 , 8367-3,7363 etc
我正在使用正则表达式从这些数字中消除-2-3来检索人数。现在消除了这个后,我需要将这个人数与另一个表中的人数进行比较。
当我使用join时,它检索的行数较少。我在表xx_ass_table
中有13000行,我需要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工作关系表,这就是我使用左连接的原因。但是这个查询返回4000行,它应该返回13k行。
答案 0 :(得分:1)
尝试避免这种连接并使用左外连接的正确语法,我不确定您是否正确放置了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