2012-06-21 45 views
0

请原谅我的标题含糊不清,我真的不知道如何简洁地编写我想要做的事情。Mysql查询在QUERY中,每个ID只有1个结果

我有

名称的表 - 海峡 ITEM_ID - INT 位置 - 诠释

name  item_id position 
| 6asd |   17 |  1 | 
| asdf |   3 |  1 | 
| asdf |   3 |  2 | 
| asdf |   3 |  3 | 
| asdf |   3 |  4 | 

我想的item_ids列表上使用IN询问,只有每返回1行项目,这应该是最低位置的行。

select name, item_id, position from my_table 
WHERE item_id IN (17, 3) AND name != ''; 

当我只是试图返回最低位置时,这会返回item_id的所有行。当然,我看着ORDER_BY和LIMIT,但我的查询只在整个结果集上完成,而不是单独在每个ID上。

ORDER BY position ASC LIMIT 1

有没有人尝试过这样做?任何帮助将不胜感激。我需要以某种方式使用子选择吗?

+2

您是否在寻找MIN()? – Bono

+0

@Bono我认为这正是我正在寻找的。 – dm03514

回答

4

使用MIN()可用。

SELECT name, item_id, MIN(position) 
FROM my_table 
WHERE item_id IN (17, 3) AND name != '' 
GROUP BY item_id; 
+0

集团由做出了区别 – dm03514

1

我想你可能正在寻找MIN()函数。

MySQL MIN函数用于找出记录集中具有最小值的记录。

尝试一些沿着这些路线:

"SELECT name, item_id, MIN(position) 
FROM my_table 
WHERE item_id IN (17, 3) AND name != '' 
GROUP BY item_id"; 
+0

你需要额外的'GROUP BY item_id'语句... –

+0

@FahimParkar谢谢,这里不是一个真正的sql guru; P – Bono

+0

即使我不是guru。 :D仍然是初学者。 –

相关问题