distinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只有用二重循環查詢來解決,而這樣對於一個數據量非常大的站來說,無疑是會直接影響到效率的。
distinct 會對返回的結果集進行排序,所以,最好和order by 結合使用,可以提高效率。
一、distinct 基本用法
1.用於單列
1 select distinct name from A
執行后結果如下:
2.作用於多列
1 select distinct name, id from A
執行后結果如下:
實際上是根據name和id兩個字段來去重的,這種方式Access和SQL Server同時支持。
1 select distinct xing, ming from B
返回的結果為兩行,這說明distinct並非是對xing和ming兩列“字符串拼接”后再去重的,而是分別作用於了xing和ming列。
3.COUNT統計
1 select count(distinct name) from A; --表中name去重后的數目, SQL Server支持,而Access不支持
count是不能統計多個字段的,下面的SQL在SQL Server和Access中都無法運行。
1 select count(distinct name, id) from A;
若想使用,請使用嵌套查詢,如下:
1 select count(*) from (select distinct xing, name from B) AS M;
同時,也可以這樣查詢所有字段,只對單一字段去重
1 select *, count(distinct name) from table group by name
4.distinct必須放在開頭
1 select id, distinct name from A; --會提示錯誤,因為distinct必須放在開頭
5.其他
distinct語句中select顯示的字段只能是distinct指定的字段,其他字段是不可能出現的。例如,假如表A有“備注”列,如果想獲取distinc name,以及對應的“備注”字段,想直接通過distinct是不可能實現的。