症状如题,在一台机器上报错 ORA-00918: column ambiguously defined,另外一台却运行正常。如果在把SQL中别名改成不相同的,就不会报错了。
奇怪的是,别名不是不能相同吗?为啥在一台机器上居然不报错?
SQL如下:
SELECT a.CLIENT_ID, a.PLCLAIMSEQ
FROM ROS_PLCONTROL_T a
left join ROS_PLDATA_T b ON a.PLCLAIMSEQ = b.PLCLAIMSEQ
left join ROS_PLHI_T c ON a.PLCLAIMSEQ = c.PLCLAIMSEQ
and c.hiindex = b.current_hi_seq
left join ROS_PROVIDER_T e ON a.provider_id = e.provider_seq
and a.client_id = e.client_id
left join ROS_PROJECT_T d ON a.project_id = d.project_id
and d.provider_id = e.provider_seq
left join ROS_PLDATA_RULES_T f ON b.PLCLAIMSEQ = f.PLCLAIMSEQ
left join (select round(t.total_payments_amt / nullif(m.expected_reimb, 0) * 100) as PERCENT_PAYMENTS_AMT,
m.plclaimseq
from ROS_PLCONTROL_T m, ROS_PLDATA_T t
where m.plclaimseq = t.plclaimseq) s ON a.PLCLAIMSEQ =
s.PLCLAIMSEQ
JOIN ROS.ROS_WORK_QUEUE_CRITERIA_DTL_T wkdtl on a.CLIENT_ID =
wkdtl.field_value
and wkdtl.REC_ID = 900
JOIN ROS.ROS_WORK_QUEUE_CRITERIA_DTL_T wkdtl on a.PROVIDER_ID =
wkdtl.field_value
and wkdtl.REC_ID = 901
JOIN ROS.ROS_WORK_QUEUE_CRITERIA_DTL_T wkdtl on d.project_type =
wkdtl.field_value
and wkdtl.REC_ID = 902
------解决方案--------------------
以前也有碰过。 10g下 不会出错的语句 放在11g下就会报错了。 因为 查询的列没有指明所属表,导致冲突产生的问题
------解决方案--------------------
表的别名重复...
这个就没什么好讨论的了,别名的使用主要是为了简化和区分
两个表的别名设成一样,逻辑上都会出现问题
例如
select *
from a,a where a.c1=a.c1
这里条件里的a可以认为是同一个表,造成恒成立,产生笛卡尔积
在有些版本中的确不会报错,但不报错不一定是好事,它可能会产生你不想要的结果集