日期:2014-05-17  浏览次数:20689 次

rowid的问题,为什么同一句sql在不同的数据库结果不一样?
两个关联的表有多条同样的记录,我只需要取出相同记录中的一条,在其中一台数据库,我的sql语句如下
select   *   from   contract   a   where   a.rowid   <   (select   max(b.rowid)   from     rbs.contract   a,   contract_billing   b   where   a.contract_num   =   b.contract_num   and   to_char(b.BILLING_DATE,   'yyyy ')   =   '2006 ')
其实在同一台机以下写法也能得出同样的结果
select   *   from   contract   a   where   a.rowid   <   (select   min(b.rowid)   from     rbs.contract   a,   contract_billing   b   where   a.contract_num   =   b.contract_num   and   to_char(b.BILLING_DATE,   'yyyy ')   =   '2006 ')

但在另一台数据库,以上写法搜不出任何记录,如果改成下面这样就可以
select   *   from   contract   a   where   a.rowid   >   (select   min(b.rowid)   from     rbs.contract   a,   contract_billing   b   where   a.contract_num   =   b.contract_num   and   to_char(b.BILLING_DATE,   'yyyy ')   =   '2006 ')
在这台数据库,下面的写法结果也是一样的
select   *   from   contract   a   where   a.rowid   >   (select   max(b.rowid)   from     rbs.contract   a,   contract_billing   b   where   a.contract_num   =   b.contract_num   and   to_char(b.BILLING_DATE,   'yyyy ')   =   '2006 ')

请问这事怎么回事?谢谢.



------解决方案--------------------
有一个数据库的数据是从另一个数据库导过来的吧?rowid是oracle自动生成的一个字段,是跟生成(导入)数据的先后顺序有关的。你应该用你自己生成的主键字段(row_id).
------解决方案--------------------
同意楼上的