2013-11-12 7 views
0

NB: Я задал вопрос перед (How to select from the db where version field is the recent one), и он работает хорошо. Это не дубликат.JOIN и INNER JOIN запросы

SELECT p.* FROM `pricing` p 
JOIN (SELECT `distributor`,MAX(`version`) AS ver 
     FROM `pricing` GROUP BY `distributor`) mx 
    ON mx.ver=p.version AND p.distributor = mx.distributor 

Используя приведенные выше запрос можно выбрать все детали из ценовой таблицы, где дистрибьютор имеет самую последнюю версию. [Дистрибьютор будет иметь разные версии. Мне нужно только выбрать последнюю версию]. У меня есть другая таблица под названием product_picker. Мне нужно только выбрать данные из таблицы цен, где код ценообразования = код product_picker. Я использовал приведенный ниже код:

SELECT p.* FROM `pricing` p,pk.* 
FROM `product_picker` 
JOIN (SELECT `distributor`,MAX(`version`) AS ver 
     FROM `pricing` GROUP BY `distributor`) mx 
    ON mx.ver=p.version AND p.distributor = mx.distributor 
INNER JOIN `product_picker` pk ON p.code=pk.code 

Но я знаю, что это не сработает. Я просто изучаю ПРИЛОЖЕНИЕ. Как я могу улучшить свой код?

Спасибо!

ответ

2

Механизм довольно прост:

SELECT p.*, pk.* 
FROM 
    `pricing` p 
     JOIN (
      SELECT 
       `distributor`, 
       MAX(`version`) AS ver 
      FROM `pricing` 
      GROUP BY `distributor` 
     ) mx ON mx.ver = p.version AND p.distributor = mx.distributor 
     JOIN `product_picker` pk ON pk.code = p.code -- the join has to be added after the other one, and the ON clause has to make it clear for SQL that the code is the criteria 
+0

да :) Еще раз спасибо. Я пытаюсь сделать больше условий соединения, чтобы изучить его. – NewPHP

+1

добро пожаловать! это хорошая практика;) – Sebas