原文鏈接:這里
0.前言
消除重復數據分為幾種不同的情況,請參考食用
1.使用DISTINCT 關鍵字。
適用場景:返回的數據有重復的行時,會直接消除掉所有重復的行數據。
例如: 下面這個表,

如果我們執行下面的操作
SELECT DISTINCT message_id FROM message_receive
返回結果如下:

可以看出,返回的數據沒有任何一個重復的行。我們繼續操作,執行下面的語句
SELECT DISTINCT message_id,content_type FROM message_receive
這次我們查詢了兩個字段,返回結果如下:

可以看出,沒有任何一行是完全一樣的。
2.HAVING COUNT 關鍵字
COUNT(*) 函數返回在給定的選擇中被選的行數。配合HAVING 關鍵字一同使用。
適用場景:可以用來對結果中某一個字段的唯一性進行篩選,而不管其他字段。
例如:
現在要查兩個字段,在數據庫中字段都是多對多的關系。當我們確定一個一個字段時,就可以利用這個來進行篩選。
select user_id,user_account,name,is_read,message_id
FROM user,message_receive
WHERE message_id = 1615373423
GROUP BY user_account
HAVING count(user_account)=1
上面這段sql表示從兩個表中查找數據,對於返回的數據使用
GROUP BY ****
HAVING count(*****)=1
來進行篩選,表示(字段)的數量 (大於等於)數值。 符合這樣的數據返回。
注意,如果你寫 HAVING count(****)=10。 表示查找某個字段出現10次的數據,返回的整體數據仍然是一條,而不會出現一條。