2012-12-12 34 views
6

我記錄如下:如何從一列中選擇不同的值僅

key | name 
-------------- 
1111 | aa 
1111 | bb  
2222 | cc 

我需要選擇keynamekey值是不同的。當我嘗試:

select distinct key, name from table; 

我得到了所有的行,因爲在查詢中列的組合需要不同:keyname。但是,我需要的僅僅是獨特的key,我不在乎name。我有很多記錄,所以我需要一個實用的方法。

回答

10

查詢:

SELECT `key`, MAX(`name`) as name 
FROM `table` 
GROUP BY `key` 
0
SELECT key, name FROM table GROUP BY key; 

這將返回一行的key每個不同的值,並且name值任意地從在該組中的行選擇的。在實踐中,MySQL傾向於從物理上存儲在組中的行中返回名稱的值,但這不能保證。

如其他答案所示,您可以將名稱放入聚合表達式中。

0

如果你不關心不細分電子郵件領域嘗試此查詢 -

不使用聚合函數
select key, name from table group by key order by name 

的MySQL讓選擇領域。

按名稱排序有助於從組中選擇名字。

+0

我相信這是無效的SQL,MySQL的altough接受它,並返回的東西。此外,這個「something」是一組具有相同鍵的名稱中的一個隨機名,因此結果不是確定性的(取決於表的刪除和插入)。這是沒有意義的,並鼓勵那些尚未掌握聚合概念的人士之間的誤解。 – colemar

+0

我不能說這是無效的。 MySQL允許它,我們可以使用它。我同意隨機記錄;應該有聚合函數或ORDER BY子句 - 這將有助於選擇確切的值。我會編輯我的答案。 – amk

+0

根據ANSI/ISO SQL它是無效的,因爲它會導致不明確的結果。就我所知,MySQL和SQLite是唯一允許這種形式的RDBMS實現。其他RDBMS產品返回錯誤。 –

2

爲什麼不乾脆:

SELECT distinct key 
FROM table 

SELECT key, name 
FROM table 
GROUP BY key 
0

如何:

select * from table group by key having count(key) = 1 
相關問題