0

请原谅我的标题含糊不清,我真的不知道如何简洁地写出我想要做的事情。

我有一张桌子

名称 - str item_id - int 位置 - int

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

我正在尝试在列表上使用 IN 查询,item_ids并且每个项目仅返回 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

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

4

2 回答 2

4

使用可用的MIN()

SELECT name, item_id, MIN(position)
FROM my_table 
WHERE item_id IN (17, 3) AND name != ''
GROUP BY item_id;
于 2012-06-21T14:25:48.720 回答
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";
于 2012-06-21T14:25:48.337 回答