2017-08-09 99 views
2

我試圖獲取僅由唯一個人使用的顏色。使用下面的示例數據:篩選重複項後選擇具有唯一值的行

+---------+-------------+ 
| color | name  | 
+---------+-------------+ 
| red  | Jane  | 
| red  | Jane  | 
| red  | Bob   | 
| blue | David  | 
| blue | Bill  | 
| green | Jack  | 
| green | Jack  | 
| purple | Jack  | 
| orange | Dan   | 
+---------+-------------+ 

我得到

選擇顏色,名稱 去掉重複的FROM表 GROUP BY顏色,名稱;

+---------+-------------+ 
| color | name  | 
+---------+-------------+ 
| red  | Jane  | 
| red  | Bob   | 
| blue | David  | 
| blue | Bill  | 
| green | Jack  | 
| purple | Jack  | 
| orange | Dan   | 
+---------+-------------+ 

什麼我需要做進一步篩選下來到我期望的結果集綠色,紫色,橙色的,只是因爲只有一個人與該顏色相關聯?

+0

我無法理解您的狀況。 「你不想與其他顏色分享不同名稱的顏色」是什麼意思?爲什麼包含「orange」? –

+0

你的意思是具有完全不同名稱的顏色嗎? –

+0

@DavyM:是的,對於混亂感到抱歉。我試圖想出一個非常具體的方式來描述它。我自從對這個問題進行了編輯。 –

回答

2

您可以通過在查詢中進一步做到這一點。把你有的作爲一個子查詢,然後用它作爲第二個子查詢的來源,來計算每種顏色顯示的不同名稱的數量。然後,它將成爲唯一名稱數量爲1的結果集中的一個選擇。

SELECT color 
FROM (SELECT color, COUNT(name) namecount FROM (SELECT color, name 
      FROM table GROUP BY color, name) t1 
     GROUP BY color) t2 
WHERE namecount = 1 
+0

它的工作原理是,在向子查詢添加別名後,它返回了正確的顏色,但我在哪裏添加了與該顏色對應的名稱列? –

+0

對顏色使用原始查詢的INNER JOIN'選擇顏色,名稱FROM表GROUP BY顏色,名稱'。這將僅爲最終列表中的顏色生成單個名稱記錄。 – SandPiper