2015-08-27 5 views
1

У меня есть две таблицы:MySQL низкий и самое высокое значение с присоединиться

mysql> SELECT * FROM master_products; +----+-------+ | id | name | +----+-------+ | 1 | row1 | | 2 | row2 | | 3 | row3 | | 4 | row4 | +----+-------+

И

mysql> SELECT * FROM products; +----+---------+-------+ | id | masterid | cost | +----+---------+-------+ | 1 | 1 | 1000 | | 2 | 1 | 1050 | | 3 | 2 | 1020 | | 4 | 2 | 999 | | 4 | 3 | 899 | +----+-------+---------+

Я хочу, чтобы выбрать все изделия из главной таблицы с самой высокой и самой низкой стоимостью от продукта table, но когда я использую mysql min, функция max, то она не возвращает все продукты, вот мой запрос:

SELECT master_products.id, имя, MIN (стоимость) AS LowestCost, MAX (стоимость) AS HighestCost FROM master_products JOIN product ON product. masterid = master_products. id

Есть ли способ получить это по одному запросу? желаемый результат:

+----+------------+------------+--------------+ | id | name | LowestCost | HighestCost | +----+-------------+------------+--------------+ | 1 | row1 | 1000 | 1050 | | 2 | row2 | 999 | 1020 | | 3 | row3 | 899 | 899 | | 4 | row4 | NA | NA | +----+-------+-----------+------+--------------+

+3

Try добавить 'GROUP BY id' в конце запроса – Epodax

+0

Извините, но почему«он не возвращает все продукты «? В вашем примере я вижу, что все цены на продукцию в правильном порядке. Можете ли вы объяснить больше - где проблема? –

+0

@VladimirGilevich Это его «желаемый» выход без фактического вывода – Christian

ответ

1

Используйте левое соединение:

SELECT master_products.id, master_products.name, MIN(cost) AS LowestCost, MAX(cost) AS HighestCost 
FROM master_products 
LEFT JOIN `products` ON `products`.`masterid`= `master_products`.`id` 
GROUP BY master_products.id 
Смежные вопросы