萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MYSQL中篩選不重復記錄值的示例

MYSQL中篩選不重復記錄值的示例

最簡單的篩選不重復記錄可以直接使用distinct函數來幫助我們解決,下面小編就給各位演示在phpmyadmin中使用distinct過濾重復記錄吧。

我的wordpress數據庫中的wp_postmeta表都有10,000多行了,如果使用兩次循環查找判斷,雖然我們不累,但是程序運行很累啊。

wordpress-post-mate-table

如果我想用一條語句查詢得到name不重復的所有數據,那就必須使用distinct去掉多余的重復記錄。

select distinct `meta_key` from `wp_postmeta`

查詢結果

paichu

從上圖可以看出查詢的結果只有24條了,所有meta_key相同的都被排除了。

在使用mysql時,有時需要查詢出某個字段不重復的記錄,雖然mysql提供有distinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,經過實驗,有如下方法可以實現。

舉例如下:

這是test表的結構
id test1 test2
1 a 1
2 a 2
3 a 3
4 a 1
5 b 1
6 b 2
7 b 3
8 b 2
比如我想用一條語句查詢得到test1不重復的所有數據,那就必須使用distinct去掉多余的重復記錄。
select distinct test1 from test
得到的結果是:
test1
a
b
好像達到效果了,可是,我想要得到的是id值?改一下查詢語句吧:
select distinct test1, id from test

test1 id
a 1
a 2
a 3
a 4
b 5
b 6
b 7
b 8
distinct怎麼沒起作用?作用是起了的,不過他同時作用了兩個字段,也就是必須得id與test1都相同的才會被排除,這不可能的,id是自動增長的。。。

我們再改改查詢語句:

select id, distinct test1 from test
很遺憾,除了錯誤信息你什麼也得不到,distinct必須放在開頭。難到不能把distinct放到where條件裡?能,照樣報錯。。。。。。。

通過查閱手冊,可以通過group_cancat來實現:

SELECT id, group_concat( DISTINCT test1 ) FROM test GROUP BY test1
id group_concat( distinct test1 )
1 a
5 b


不過它只有在4.1.0以後才能用,對於那些老版本的數據庫是不行的。

可以通過其他函數來實現:

select *, count(distinct test1) from test group by test1
id test1 test2 count( distinct test1 )
1 a 1 1
5 b 1 1

最後一項是多余的,不用管就行了,目的達到。。。。。

還有更簡單的方法也可以實現:

select id, test1 from test group by test1
id test1
1 a
5 b

順便提下mysql的DISTINCT的關鍵字有很多你想不到的用處

1.在count 不重復的記錄的時候能用到

比如SELECT COUNT( DISTINCT id ) FROM tablename;

就是計算talbebname表中id不同的記錄有多少條

2,在需要返回記錄不同的id的具體值的時候可以用
比如SELECT DISTINCT id FROM tablename;
返回talbebname表中不同的id的具體的值

3.上面的情況2對於需要返回mysql表中2列以上的結果時會有歧義

比如SELECT DISTINCT id, type FROM tablename;

實際上返回的是 id與type同時不相同的結果,也就是DISTINCT同時作用了兩個字段,必須得id與tyoe都相同的才被排除了,與我們期望的結果不一樣

4.這時候可以考慮使用group_concat函數來進行排除,不過這個mysql函數是在mysql4.1以上才支持的

5.其實還有另外一種解決方式,就是使用

SELECT id, type, count(DISTINCT id) FROM tablename
雖然這樣的返回結果多了一列無用的count數據(或許你就需要這個我說的無用數據)
返回的結果是 只有id不同的所有結果和上面的4類型可以互補使用,就是看你需要什麼樣的數據了

copyright © 萬盛學電腦網 all rights reserved