select * from table1 a 
where rowid !=(select max(rowid) from table1 b where a.name1=b.name1 and a.name2=b.name2);谁能详细解释下Oracle这条SQL语句什么意思?
怎么执行的?
内层的语句跟外层的语句怎么关联的?
感觉很乱!

解决方案 »

  1.   

    内外你都取了别名 :table1 b where a.name1=b.name1 and a.name2=b.name2 通过这两个字段做的关联,查到一个最大的rowid (建议楼主百度一下 rowid)这条语句的意思,是把 name1 和 name2 相同的数据,去掉一条; 如果你把 != 换成 = ,那就是数据去掉重复的;
      

  2.   

    查询出table1中name1,name2重复的数据。
      

  3.   

     ROWID是数据库中行的全局唯一地址。对于数据中的每一行,rowid伪列返回行的地址。这句代码就是查出表中符合 a.name1=b.name1 and a.name2=b.name2) 条件的并且rowid非最大的那些数据
      

  4.   

    根据 name1,name2两个字段 查出 table1中重复的数据。如果name1,name2 重复的数据有两条  ,那么查出一条数据。
    如果name1,name2 重复的数据有三条  ,那么查出两条数据。
    如果name1,name2 重复的数据有四条  ,那么查出三条数据。