oracle查询的奇怪行为

时间:2017-03-08 12:04:22

标签: oracle

我不是甲骨文专家。我遇到了一个非常奇怪的问题,但不知道为什么会这样。 我的问题是

SELECT hc.id, hc.owner_name, hc.national_id, hc.phone_no, hc.location, hc.status, hc.expiry_status, od.office_title AS issuer, hc.create_date, hc.email, hc.LATTITUDE, hc.LONGITUDE, hc.HASAD_NO, hc.NUMBERATION, hc.BREEDING_TYPE, hc.PROGENY, hc.office_id, hc.issuer_id, hc.expiry_status, hc.status FROM health_cards hc 
                    LEFT JOIN office_details od ON od.office_id = hc.issuer_id AND od.lang = :lang 
                    WHERE hc.id = :search_data_num OR hc.national_id = :search_data_num or hc.phone_no = :search_data_num OR hc.owner_name LIKE :search_data ORDER BY hc.create_date DESC, hc.id desc OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY

当我运行此查询时出现以下错误

ORA-00918: column ambiguously defined
00918. 00000 -  "column ambiguously defined"

但是如果我从我的查询中删除OFFSET 0 ROWS FETCH NEXT 50 ROWS就可以完美地运行。

我想知道此查询无法使用偏移语句的原因。

2 个答案:

答案 0 :(得分:2)

您重复了专栏hc.status.

`select 1 as "A" as "A"  from dual` - execute OK; 

`select * from (select 1 as "A" 
                    , 2 as "A" 
                 from dual);` - ORA-00918: column ambiguously defined

如果你和偏移,oracle可能会做类似的事情。

答案 1 :(得分:0)

您的选择列表中有两列hc.expiry_status

问题是我们在选择列表中允许这个,但不在内联视图中。添加行限制子句时,Oracle会转换查询,转换将使用内联视图。有一个错误,13687511被标记为已修复。 同时,解决方法是要么不选择它两次,要么对列进行别名。