SQL中distinct的用法

2021-08-09 21:24:04 字數 1682 閱讀 3145

在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供有distinct這個關鍵字來過濾掉多餘的重覆記錄只保留一條,但往往只 用它來返回不重覆記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,這個問題讓我困擾很久,用distinct不能解決的話,我只有用二重迴圈查詢來解決,而這樣對於乙個資料量非常大的站來說,無疑是會直接影響到效率的,所以浪費了我大量時間。

表a:

示例1

複製**

**如下:

select distinct name from a

執行後結果如下:

示例2

複製**

**如下:

select distinct name, id from a

執行後結果如下:

實際上是根據「name+id」來去重,distinct同時作用在了name和id上,這種方式access和sql server同時支援。

示例3:統計

複製**

**如下:

select count(distinct name) from a;   --表中name去重後的數目, sql server支援,而access不支援

select count(distinct name, id) from a;   --sql server和access都不支援

示例4

複製**

**如下:

select id, distinct name from a;   --會提示錯誤,因為distinct必須放在開頭

其他

distinct語句中select顯示的字段只能是distinct指定的字段,其他欄位是不可能出現的。例如,假如表a有「備註」列,如果想獲取distinc name,以及對應的「備註」字段,想直接通過distinct是不可能實現的。

但可以通過其他方法實現關於sql server將一列的多行內容拼接成一行的問題討論

distinct使用注意點:

1.必須放在查詢欄位最前面 (若不出最前面,會報錯:表示式缺失)

2.distinct後面有多個查詢欄位時,當這多個字段完全不同時,才算是重覆記錄,予以剔除

如果查詢多個字段,只想給第乙個欄位去重,那麼這樣做事不可以的

3.distinct與order by連用時,order by後面的排序欄位名,必須是最新的欄位名稱或別名。(若是不處理會,後報錯:不是查詢表示式)

處理方法見《ora-01791: 不是 selected 表示式(distinct使用注意點)》

sql中DISTINCT的用法

表a 示例1select distinct name from a執行後結果如下 示例2select distinct name,id from a執行後結果如下 實際上是根據 name id 來去重,distinct同時作用在了name和id上,這種方式access和sql server同時支援。...

SQL中distinct的用法

表a 表b select distinct name from a執行後結果如下 示例2.1 select distinct name,id from a執行後結果如下 實際上是根據name和id兩個欄位來去重的,這種方式access和sql server同時支援。示例2.2 select dist...

SQL中distinct的用法

表a 表b select distinct name from a執行後結果如下 示例2.1 select distinct name,id from a執行後結果如下 實際上是根據name和id兩個欄位來去重的,這種方式access和sql server同時支援。示例2.2 select dist...