Работает также с вложенными подзапросами, но здесь они вам не нужны
Это покажет вам все записи там, где у вас самая низкая цена
Так что, когда у вас было две записи для pid = 1, где диаметр был 110, вы бы увидели его.
Вы не указали, что делать с двумя или более рядами с минимальной ценой и доступными больше 0 . Поэтому, если вам нужен только один ряд для каждого pid, вы должны сгруппировать результат и решить, какой из доступных вариантов выбрать, с помощью функции агрегирования .
CREATE TABLE prices
(`id` int, `pid` int, `price` int, `available` int)
;
INSERT INTO prices
(`id`, `pid`, `price`, `available`)
VALUES
(1, 1, 100, 0),
(2, 1, 110, 1),
(3, 1, 200, 1),
(4, 2, 150, 5),
(5, 2, 160, 0)
;
✓
✓
SELECT
`id`, p.`pid`, `price`, `available`
FROM prices p INNER JOIN
(SELECT MIN(price) minprice, pid FROm prices WHeRE available > 0 GROUP BY pid) p1
ON p1.minprice = p.price AND p.pid = p1.pid
id | pid | price | available
-: | --: | ----: | --------:
2 | 1 | 110 | 1
4 | 2 | 150 | 5
дБ <> скрипка здесь