因爲設計須要,須要查詢不重複的記錄值,同類問題,想必你們都遇到過,因而乎立刻GOOGLE一下,發現此類問題還挺多,解決方案也很多,仔細看看。
例若有以下表結構和值
table
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
5 a 男
6 b 男
方案一:distinct
select distinct name from table
獲得結果:
name
a
b
c
d
實現效果,那若是要同時打開其它記錄呢?再試試
select distinct name,id from table
測試沒什麼效果,查下得知,這樣實際是要name和id字段都重複才被篩選。繼續查找可得以下方法:
方案二:group by
select *, count(distinct name) from table group by name
Oracle下測試失敗,聽說MYSQL下經過,無論,繼續思考....
翻翻書,試試
select min(fid),name,sex from table group by name
成功,現實以下結果:
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
繼續思考,若是要打開全部記錄,不指定字段用(*),貌似這方法就不行了!
select * from table where fid in(Select min(fid) FROM table group by name)
測試成功
fid name sex
1 a 男
2 b 男
3 c 女
4 d 女
方案三:
原本已經完了,忽然想起前幾天在網上查了查詢數據中全部某字段不重複的記錄
select * from table where name in(select name from table group by name having count(name)=2)
獲得以下結果:
fid name sex
1 a 男
2 b 男
5 a 男
6 b 男
以此類推:
select * from table where name in(select name from table group by name having count(name)=1)
按道理說沒問題,你們試試~~
再多的字段都所有現實。哎,原來如此簡單!回顧網上方法distinct,Inner Join等等,麻煩,並且有很大侷限性.
總結以下:
select distinct name from table打開不重複記錄的單個字段
select * from table where fid in(Select min(fid) FROM table group by name)打開不重複記錄的全部字段值
select * from table where name in(select name from table group by name having count(name)=1)打開不重複任意次數的全部記錄
ide