MySQL находит MIN () из повторяющихся строк - PullRequest
0 голосов
/ 08 марта 2019

У меня есть 3 таблицы, как показано ниже:

Таблица продуктов

PID       CODE
1        a
2        b

Таблица цен

PrID    PID(ID from Product)   UMID(ID from UOM)  Price
1         1                        1               10
2         1                        2                5
3         2                        1               10

Таблица UOM

UMID           UM_NAME         UM_RATE
1               BOX              5
2               PC               10

Я хочу получить product с price и тот uom, у которого есть мин UM_RATE. Например, продукт CODE a имеет две цены, но цены разные для разных uom. Чего я хочу достичь, так это

PID     CODE    PrID    Price     UM_NAME     UM_RATE
1        a       1       10         BOX          5 
2        b       3       10         BOX         5

Потому что в коробке есть мин UM_RATE. Я пробовал следующий запрос,

SELECT product.*, price.*, uom.um_name, MIN(uom.um_rate)
FROM product
LEFT JOIN price ON price.pid = product.pid
LEFT JOIN uom ON price.umid = uom.umid
GROUP BY product.pid

Этот запрос дает мне следующий результат,

PID     CODE    PrID    Price     UM_NAME     UM_RATE
1        a       1       10         PC          5 
2        b       3       10         BOX         5 

что не так. потому что UM_RATE 5 относится к UM_NAME коробке. Как я могу получить ожидаемый результат?

1 Ответ

1 голос
/ 08 марта 2019

использовать объединение и связанный подзапрос

    select * from (select distinct p.*,u.UMID as uid,
 u.UM_NAME,u.UM_RATE,pr.code from
 price p join uom  u on p.UMID=u.UMID
  join product pr on pr.PID=p.PID
  ) a
  where a.UM_RATE =(select min(UM_RATE) from 
                    (select  p.*,u.UMID as uid,
 u.UM_NAME,u.UM_RATE,pr.code from
 price p join uom  u on p.UMID=u.UMID
  join product pr on pr.PID=p.PID) t where t.code=a.code

      )


prid    PID     UMID    price   uid     UM_NAME     UM_RATE     code
1       1       1       10      1       Box           5          a
3       2       1       10      1       Box           5          b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...