簡體   English   中英

為什么 DISTINCT 不刪除重復項?

[英]Why doesn't DISTINCT remove duplicates?

我目前正在嘗試運行以下查詢。

SELECT DISTINCT friend_id, hobbies as friend_hobby
                FROM all_friends
                WHERE friend_id NOT IN 
                     (SELECT distinct(friend_id)
                      FROM all_friends
                      WHERE (friend_type = 'Good' OR friend_type = 'Great')
                      );

預期結果

friend_id | friend_hobby
--------------------
123       | Basketball
--------------------
345       | Painting 

實際結果

friend_id | friend_hobby
--------------------
123       | Basketball
--------------------
123       | Social Media
--------------------
123       | Reading
--------------------
123       | Hiking
--------------------
123       | Cooking
--------------------
345       | Painting 
--------------------
345       | Hiking 
--------------------
345       | Writing
--------------------
345       | Movies
--------------------
345       | Coding

誰能解釋為什么distinct 子句不返回我的預期結果?

是因為我也在獲取friend_hobby嗎?

注意,我需要同時選擇friend_id 和hobbies,因為我需要使用Select 語句來UNION 來獲取friend_id 和hobbies。 這個 select 語句中的愛好並不重要,因為它們會在某個時候被替換。

解決辦法是什么? 我知道在語句末尾添加 group by 將刪除重復的朋友 ID,但我不希望在沒有聚合發生的情況下使用 group by。

謝謝!

問題是 DISTINCT 基於您定義的“組”

SELECT DISTINCT friend_id, hobbies as friend_hobby

在上面的行中,您是說要為您提供所有不同的friend_idhobbies (friend_hobby) 對。

但是,您的預期結果似乎更像是:給我取第一個具有不同 id 的元組(如果這句話有意義的話)。

在這種情況下,我相信做類似下面的帖子應該有助於你想要的: https : //stackoverflow.com/a/42345019/5989233

DISTINCT 本身不會刪除重復項,您也需要group by

SELECT DISTINCT friend_id, friend_hobby from {whatever} group by friend_id 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM