oracle用rowid去重


oracle中如果要查詢某張表中多個字段,又只對某個字段去重的時候用distinct或者group by都不行。distinct和group by會對要查詢的字段一起進行去重,也就是當查詢的所有字段都相同,oracle才認為是重復的。這時用rowid是個不錯的選擇。如下,有一張test表,中有a,b,c,d,e字段,如果只想對a 字段去重,然后查詢出其他字段,可以用下面SQL語句
select a,b,c,d,e
from   test t1
where   t1.rowid    in
(select  max(t2.rowid)  from  test  t2  where t1.a=t2.a)
注:t1和t2中rowid是一個字段,因為t1和t2是一張表
原理實際上是test表以a字段進行自查詢,對於a中沒有重復的數據rowid只有一個值
所有max(rowid)就是rowid本身,但是對於a中重復的數據rowid會有多個,取最大的
一個,這樣就去重了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM