Alternative to using MIN() in a subquery?
This cannot be done without a subselect as you state.
There are two steps involved.
1.  For each name, find the record with the MIN(qty).
2.  Return the ID for that record.  

There are other approaches but the two steps remain.

It appears the query you posted has some missing info. This should be the whole thing. 

    SELECT id, name 
FROM (
    SELECT name, MIN(qty) minqty
    FROM foo fs
    GROUP BY name
) AS a
    JOIN foo f
        ON f.name = fs.name
        AND f.qty = fs.minqty