当前位置: 代码迷 >> Oracle管理 >> 同一句SQL,在一个服务器上一般,另一个报错
  详细解决方案

同一句SQL,在一个服务器上一般,另一个报错

热度:97   发布时间:2016-04-24 04:15:45.0
同一句SQL,在一个服务器上正常,另一个报错。
症状如题,在一台机器上报错 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可以认为是同一个表,造成恒成立,产生笛卡尔积

在有些版本中的确不会报错,但不报错不一定是好事,它可能会产生你不想要的结果集
  相关解决方案