MySQL ВЫБЕРИТЕ MIN строку INNER JOINed таблицы - PullRequest
0 голосов
/ 03 февраля 2012

Это то, что у меня сейчас (немного урезано):

SELECT *, item_prices.price AS minPrice
    FROM items  
    LEFT JOIN item_details USING(item_id) 
    LEFT JOIN item_prices USING(item_id) 
WHERE 1=1
GROUP BY item_id;

Моя проблема в том, что item_prices может соответствовать более чем одной строке для каждого элемента - я хочу получить только строку с минимальным значением price. Я искал вокруг SO и в Интернете похожие вопросы, но чувствую себя немного не в своей тарелке, может кто-нибудь помочь?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Вы должны использовать запрос:

SELECT *, MIN(item_prices.price) AS minPrice
    FROM items  
    LEFT JOIN item_details USING(item_id) 
    LEFT JOIN item_prices USING(item_id) 
WHERE 1=1
GROUP BY item_id;
1 голос
/ 03 февраля 2012

Вы можете сделать это с помощью подзапроса, например:

SELECT *, 
    (SELECT 
        MIN(item_price) 
     FROM 
        item_prices inner 
     WHERE inner.item_id = items.item_id) AS minPrice 
FROM items

GROUP BY item_id; 
1 голос
/ 03 февраля 2012

Замените ваше объединение на item_prices соединением с подзапросом, который получает минимальную цену для каждого элемента:

left join (select item_id, min(price) price group by item_id) minprice using (item_id)

Я обычно не использую MySQL, но я считаю, чтосинтаксис действителен.Возможно, потребуется настроить.

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