2011-04-10 111 views
2

我在一個MySQL表使用DISTINCT得到了一個神祕的行爲,並不能算出它不會工作:的MySQL DISTINCT當某些列選擇

SELECT DISTINCT `deal_hash`,`city_name` 
    FROM `a` 
WHERE `city_name` = 'b' 

...會告訴我有期望的輸出DISTINCT on deal_hash。我也可以在任何其它列添加到選擇,它會工作只有在兩種情況下DISTINCT將失敗

SELECT DISTINCT `deal_hash`,`deal_link` 
    FROM `a` 
WHERE `city_name` = 'b' 

SELECT DISTINCT `deal_hash`,`loaded_at` 
    FROM `a` 
WHERE `city_name` = 'b' 

deal_link是一個varchar(255)和loaded_at一個INT(20) 。

+2

'distinct'適用於所有列在'select'名單不只是第一個。這是你的困惑的根源嗎?如果不是,請解釋「DISTINCT將會失敗」的含義。 – 2011-04-10 00:26:58

+3

'DISTINCT'顯示不同的**行**。 PostgreSQL是我所知道的支持'DISTINCT ON'的唯一DB,應用於特定的列。 – 2011-04-10 00:29:25

+1

謝謝你正是這個問題,沒有意識到DISTINCT的完整行爲,如果現在有人發佈這個答案,我會接受:) – kritop 2011-04-10 00:40:06

回答

2

select distinctselect s distinct。它不是特定於以下列。

嘗試使用group by代替:

select deal_hash, min(deal_link) 
from a 
where city_name = 'b' 
group by deal_hash 

select deal_hash, max(loaded_at) 
from a 
where city_name = 'b' 
group by deal_hash 
3

DISTINCT顯示不同(列值)。

PostgreSQL是我所知道的支持DISTINCT ON的唯一DB,應用於特定的列。