0

タイトルの曖昧さをお許しください。自分がやろうとしていることを簡潔に書く方法が本当にわかりません。

私はテーブルを持っています

名前-stritem_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 に答える