Как я могу объединить две таблицы БД и вернуть самую низкую цену из объединенной таблицы - PullRequest
1 голос
/ 22 февраля 2011

У меня есть две таблицы, первая таблица имеет товар, а вторая таблица цены.Таблица цен может иметь более одной цены за продукт, но я хочу отображать только самые низкие.Но я продолжаю возвращать все цены, и мне трудно понять, как это сделать.

это то, что я получаю в своем запросе:

SELECT * FROM products ASpr JOIN prices AS p ON pr.id = p.product_id ГДЕ pr.live = 1 И p.live = 1

id product1 name description £100
id product1 name description £300
id product1 name description £200
id product2 name description £50
id product2 name description £80
id product2 name description £60
id product3 name description £222
id product3 name description £234
id product3 name description £235

но я после:

id product1 name description £100
id product2 name description £50
id product3 name description £222

Любая помощь будет оценена

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Группировка по идентификатору продукта агрегированный минимум по цене

SELECT pr.*, p.m_price
FROM `products` AS pr 
  INNER JOIN (
    SELECT product_id, min(price) AS m_price
    FROM `prices`
    WHERE live = 1
    GROUP BY product_id
  ) AS p 
    ON pr.id = p.product_id 
WHERE pr.live = 1

обновление: что-то подобное MIN( CAST( SUBSTR( price, 2 ) AS DECIMAL ) может помочь избавиться от символа £ и преобразовать в число для правильного агрегирования по цене

0 голосов
/ 22 февраля 2011

Разумное применение группирования и агрегатных функций приведет к желаемым результатам.

SELECT pr.id, pr.title, pr.name, pr.description, min(p.price)
  FROM products AS pr 
    JOIN prices AS p ON pr.id = p.product_id 
  WHERE pr.live = 1 AND p.live = 1
  GROUP BY pr.id

Однако, если столбец цен представляет собой текстовый тип, он, вероятно, не будет использовать сопоставление вы хотите, и (например) 100 фунтов стерлингов будет считаться менее 90 фунтов стерлингов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...