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會有多個,取最大的
一個,這樣就去重了。