2011-04-10 266 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,应用于特定的列。