我正在下面的查询中,我想为每个候选人向外部查询返回一个日期列(DATE1
)。由于每个候选人可以有多个日期条目,因此我希望它返回存在的多个条目。
我遇到上述错误,而其他时候我得到
ORA-00933:SQL命令未正确结束
00933. 00000-“ SQL命令未正确结束”
SELECT DISTINCT xyf.can_num,
xyf.associate_id,
event_f.pi_his_itm_app_trk_creation_dt,
xyf.offer_accepted_date,
xyf.conversion_hire_date,
xyf.parent_pi_number,
information_d.job_sub_family_name,
information_d.job_family_name,
event_f.contest_number,
xyf.full_time_offer_location,
xyf.associate_name
FROM (
SELECT *
FROM (
SELECT event_f.pi_his_itm_app_trk_creation_dt
FROM event_f
inner join xyf
ON xyf.can_num = event_f.can_num
inner join information_d
ON event_f.job_info_row_wid = information_d.row_wid
WHERE information_d.job_family_name IN ('MP',
'PLE',
'EP',
'Other')
AND event_f.pi_his_itm_app_trk_sts_name = 'Extended'
AND event_f.pi_his_itm_app_trk_step_name = 'Offer'
AND information_d.title NOT IN ('Student Ambassador Program for Eligible Summer Interns',
'Student Ambassador')
AND event_f.pi_his_itm_app_trk_sts_name = 'Extended'
AND event_f.pi_his_itm_app_trk_step_name = 'Offer')) AS date1
from xyf
inner join event_f
ON xyf.can_num = event_f.can_num
inner join information_d
ON event_f.job_info_row_wid = information_d.row_wid
WHERE information_d.job_family_name IN ('MP',
'PLE',
'EP',
'Other')
AND event_f.pi_his_itm_app_trk_sts_name = 'Extended'
AND event_f.pi_his_itm_app_trk_step_name = 'Offer'
AND information_d.title NOT IN ('Student Ambassador Program for Eligible Summer Interns',
'Student Ambassador');
答案 0 :(得分:2)
最初的ORA-00933是由于AS date1
(目前是表别名and you can't use AS
for those in Oracle)引起的。
但是您还具有两个from
子句,由于它不希望第二个子句,因此将导致另一个ORA-00933。
根据您的描述,将date1
称为日期列,实际上意味着该子查询是列表达式,而不是内联视图。所以也许您真的想要这样的东西:
...
xyf.associate_name,
(
SELECT event_f.pi_his_itm_app_trk_creation_dt
FROM event_f
inner join xyf
ON xyf.can_num = event_f.can_num
inner join information_d
ON event_f.job_info_row_wid = information_d.row_wid
WHERE information_d.job_family_name IN ('MP',
'PLE',
'EP',
'Other')
AND event_f.pi_his_itm_app_trk_sts_name = 'Extended'
AND event_f.pi_his_itm_app_trk_step_name = 'Offer'
AND information_d.title NOT IN ('Student Ambassador Program for Eligible Summer Interns',
'Student Ambassador')
) AS date1
from xyf
...
我删除了第一个FROM
并在前一行添加了逗号;并删除了多余的内部子查询和重复的过滤器。
整个查询是否有意义,或者这是否是获取日期值的最有效方法,是另一回事。子查询看起来非常类似于外部查询,因此我不确定为什么不直接在外部查询中引用您想要的列:
...
xyf.associate_name,
event_f.pi_his_itm_app_trk_creation_dt as date1
from xyf
...
您可能有一个使用子查询的原因,以及将其与外部查询行关联的一种方法,但这对我来说并不明显。
当外部查询预期为单行时,我遇到的上一个错误是查询返回多行
那是因为外部查询和子查询之间没有关联。如果您单独运行子查询,则可能会返回多行,并且您正在为外部查询中的每一行运行该行,并尝试包括所有这些行。标量列表达式中不能有多行,因此会出现“ ORA-01427:单行子查询返回多个行”错误。您或者需要添加一些相关性-如果更改子查询中的表别名以使其与外部查询不同,这将更加简单-如果实际上不需要子查询,则将其完全删除(请参见上文)。 / p>