2011-08-01 51 views
2

我有一个连接的mysql查询,我希望每场比赛只获得一个并非全部的一个。我的意思是。Mysql join每场比赛获得一排

例如,我们有两个表

ids(int id) 
colors(int id, varchar color) 

我有查询

select ids.id, colors.color from ids join colors on ids.id = colors.id; 

,并得到以下

id | color 
------------------ 
1 | red 
1 | blue 
2 | yellow 
3 | green 
3 | pink 

我要查询来获取

id | color 
----------------- 
1 | red 
2 | yellow 
3 | green 

回答

3
select 
    ids.id, 
    min(colors.color) as color 
from 
    ids 
join 
    colors on ids.id = colors.id 
group by 
    ids.id 
; 
0

select ids.id, colors.color from ids join colors on ids.id = colors.id group by ids.id;

但要记住:你得到colors.color无担保值。

+0

额外的注意,如果集团通过在这里应用,会发生什么非数字数据类型。它返回一个随机值?在数字中,我们可以获得SUM,average等。 –

+0

@shamim从[documentation](http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html): _服务器可以自由选择每组中的任何值,因此除非它们相同,否则所选的值为**不确定**。此外,每个组的值的选择不能通过添加ORDER BY子句来影响。结果集的排序在选择值后发生,而ORDER BY不会影响服务器选择的值._ – Vlad

0
SELECT ids.id, colors.color FROM ids JOIN colors ON ids.id = colors.id GROUP BY ids.id 
0

谢谢您的回复,大家说我通过当然使用组此方法是第一次,我试过,但我得到了以下错误:

Column "COLORS.COLOR" must be in the GROUP BY list; SQL statement:

我的查询是

SELECT 
    ids.id, colors.color 
FROM ids 
    JOIN colors ON ids.id = colors.id 
GROUP BY ids.id; 

此外,我必须说你,我用的是h2database

4

尝试使用这限制结果量的子查询:

select ids.id, (select colors.color WHERE colors.id = ids.id LIMIT 1) AS color FROM ids;