Mysql连接每个匹配获得一行

时间:2011-08-01 09:52:04

标签: mysql join

我有一个带连接的mysql查询,我希望每个匹配只获得一行而不是全部。我的意思。

例如我们有两个表

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 

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

但请记住:colors.color获得无担保值。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

感谢您的回复,所有人都说我使用当然这个方法是我尝试过的第一个,但是我得到了以下错误:

  

列“COLORS.COLOR”必须位于GROUP BY列表中; SQL语句:

我的查询是

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

另外,我必须说你使用了h2database