Sly*_*Sly 1 sql oracle oracle11g
我要求获取扩展到候选人的所有工作机会以及候选人最终被雇用的工作机会.我创建了两个单独的查询,一个用于捕获所有要约,另一个用于捕获每个候选人最终被雇用的作业的子查询.当我将两个查询组合在一起时出现问题我得到了ORA-00913:值太多了.有什么建议?
SELECT DISTINCT h.pi_candidate_num,
h.parent_pi_number,
h.associate_name,
j.job_family_name,
j.organization_name,
j.title,
e.contest_number,
e.pi_his_itm_app_trk_creation_dt offer_date
FROM wc_hired_interns_fa h
INNER JOIN wc_application_event_f e
ON h.pi_candidate_num = e.pi_candidate_num
INNER JOIN wc_job_information_d j
ON e.job_info_row_wid = j.row_wid
WHERE e.pi_his_itm_app_trk_creation_dt IN
(SELECT DISTINCT e.pi_his_itm_app_trk_creation_dt
FROM wc_application_event_f e
INNER JOIN wc_hired_interns_fa h
ON h.pi_candidate_num = e.pi_candidate_num
INNER JOIN wc_job_information_d j
ON e.job_info_row_wid = j.row_wid
WHERE j.job_family_name IN ('MDP', 'ELP', 'Emerging Leader Program', 'Other')
AND e.pi_his_itm_app_trk_sts_name = 'Extended'
AND e.pi_his_itm_app_trk_step_name = 'Offer'
AND j.title NOT IN ('Student Ambassador Program for Eligible Summer Interns', 'Student Ambassador'))
AND j.title IN (SELECT *
FROM (SELECT DISTINCT j.title full_time_detail,
rank() over(PARTITION BY e.pi_candidate_num ORDER BY e.pi_his_itm_app_trk_creation_dt DESC) AS rowrank
FROM wc_hired_interns_fa h
INNER JOIN wc_application_event_f e
ON h.pi_candidate_num = e.pi_candidate_num
INNER JOIN wc_job_information_d j
ON e.job_info_row_wid = j.row_wid
AND j.job_family_name IN ('MDP', 'ELP', 'Emerging Leader Program', 'Other')
AND e.pi_his_itm_app_trk_sts_name = 'Hired - External'
AND e.pi_his_itm_app_trk_step_name = 'Hire'
AND j.title NOT IN ('Student Ambassador Program for Eligible Summer Interns', 'Student Ambassador'))
WHERE rowrank = 1);
Run Code Online (Sandbox Code Playgroud)
眼前的问题似乎是这一部分:
...
AND J.TITLE IN (
SELECT * FROM (
SELECT DISTINCT J.TITLE FULL_TIME_DETAIL,
RANK () OVER (PARTITION BY E.PI_CANDIDATE_NUM ORDER BY E.PI_HIS_ITM_APP_TRK_CREATION_DT DESC) AS ROWRANK
FROM WC_HIRED_INTERNS_FA H
...
Run Code Online (Sandbox Code Playgroud)
SELECT *子查询返回两个列值的含义,FULL_TIME_DETAIL以及ROWRANK.你实际上并不想要ROWRANK那里,所以改成*你想要的列:
...
AND J.TITLE IN (
SELECT FULL_TIME_DETAIL FROM (
SELECT DISTINCT J.TITLE FULL_TIME_DETAIL,
RANK () OVER (PARTITION BY E.PI_CANDIDATE_NUM ORDER BY E.PI_HIS_ITM_APP_TRK_CREATION_DT DESC) AS ROWRANK
FROM WC_HIRED_INTERNS_FA H
...
Run Code Online (Sandbox Code Playgroud)
你正在做很多子查询并重复很多代码,所以这可能会大大简化; 也许调查分析功能.但这超出了这个问题的范围和具体的错误.