2 xuxiaoyinliu xuxiaoyinliu 于 2016.02.21 16:53 提问

oracle 用rowid 取重复的sql语句怎么理解

这个SQL语句该怎么理解?

 SELECT * FROM XUTEST X WHERE ROWID!=(SELECT MAX(ROWID) FROM XUTEST Y WHERE y.SUPID=x.SUPID)

4个回答

qbilbo
qbilbo   2016.02.21 19:56
已采纳

rowid是表中每条记录的唯一ID.
假设XUTEST 表中有3条记录,SUPID为1,2,2 ROWID分别为r1,r2,r3
那么sql相当于
SELECT * FROM XUTEST X WHERE ROWID!=(r1,r3,r3)

xuxiaoyinliu
xuxiaoyinliu 回复qbilbo: 明白了,这个解释不错,多谢
接近 2 年之前 回复
qbilbo
qbilbo 回复征途6: 因为Y在括号里,X.SUPID = Y.SUPID,你可以相像成X中的每一行都和Y匹配了一次。
接近 2 年之前 回复
xuxiaoyinliu
xuxiaoyinliu 有些不明白,为什么不是SELECT * FROM XUTEST X WHERE ROWID!=(r3),我理解的后面的MAX应该只有一个值才对吧
接近 2 年之前 回复
SPE_Andy
SPE_Andy   2016.02.22 15:42

rowid是表中每条记录的唯一ID.rowid是一个单独的数据类型(属于字符型),是一个二进制数据列

语句:SELECT * FROM XUTEST X WHERE ROWID!=(SELECT MAX(ROWID) FROM XUTEST Y WHERE y.SUPID=x.SUPID)
SELECT MAX(ROWID) FROM XUTEST Y WHERE y.SUPID=x.SUPID选出XUTEST表中最大的rowid(通常是最后一行),然后选出rowid不是最
大的列。
也就是说,这条语句的意思是:选出该表中除了rowid最大的那行之外的所有数据,也就是除了最后一行之外的所有数据

qbilbo
qbilbo   2016.02.21 19:57

rowid是表中每条记录的唯一ID.
假设XUTEST 表中有3条记录,SUPID为1,2,2 ROWID分别为r1,r2,r3
那么sql相当于
SELECT * FROM XUTEST X WHERE ROWID!=(r1,r3,r3)

SPE_Andy
SPE_Andy   2016.02.22 15:42

rowid是表中每条记录的唯一ID.rowid是一个单独的数据类型(属于字符型),是一个二进制数据列

语句:SELECT * FROM XUTEST X WHERE ROWID!=(SELECT MAX(ROWID) FROM XUTEST Y WHERE y.SUPID=x.SUPID)
SELECT MAX(ROWID) FROM XUTEST Y WHERE y.SUPID=x.SUPID选出XUTEST表中最大的rowid(通常是最后一行),然后选出rowid不是最
大的列。
也就是说,这条语句的意思是:选出该表中除了rowid最大的那行之外的所有数据,也就是除了最后一行之外的所有数据

Csdn user default icon
上传中...
上传图片
插入图片