2014-03-06 3 views
1

У меня есть две таблицы, comp_product и comp_product_marchand.SQL Outer join 2 таблицы

comp_product содержит информацию о продукте (описание, название, и т.д ..)

comp_product_marchand содержит различные цены (продукт реселлерам). У каждого реселлера есть цена за продукт. Но не для всех продуктов

Я хотел бы получить только один SQL-запрос для каждого реселлера список продуктов, и его цена (даже если посредник не один)

У меня есть это SQL-запрос:

SELECT 
    p.id_product, 
    pm.price 
FROM comp_product_marchand pm 
LEFT OUTER JOIN comp_product p 
    ON p.id_product = pm.id_product 
WHERE id_marchand = 4 

(ИНЕКЕ для демонстрации только)

Этот SQL-запрос возвращает цены на продукты, которые имеют цену, а не другие ... Любые идеи?

+0

Можете ли вы опубликовать скрипку – Rohan

+0

HTTP://img15.hostingpics.net/pics/936101Sanstitre.png –

ответ

5

Изменить связь между таблицей:

SELECT 
    p.id_product, 
    pm.price 
FROM comp_product p 
LEFT OUTER JOIN comp_product_marchand pm 
    ON p.id_product = pm.id_product 
    AND id_marchand = 4 

Таким образом, вы будете показывать весь продукт и если Маршан = 4 имеет один инфо о Маршан будет показано.

Я поставил запрос на Маршан ID в предложении ON, потому что, если вы поместите его в ИНЕКЕ вы будете вырезать все строки, где Маршан не указал, что продукт

+0

Это работает! Спасибо ! –

+0

@FabienPapet: Хороший день;) –

+0

+1: Этот ответ также изменил порядок запроса от 'price LEFT JOIN product' (как в сообщении OP) до' product LEFT JOIN price', гарантируя тем самым, что все продукты всегда включаются в результаты JOIN. – MatBailie

3

Вам нужно изменить способ присоединиться работает , Вы можете либо использовать свой текущий запрос, либо использовать соединение RIGHT, или способ, которым я предпочитаю, - это изменить порядок таблиц (все еще используя соединение LEFT), поэтому таблица, в которой вы хотите увидеть все результаты, находится в левой части окна присоединиться. Иногда понятие трудно, но эта схема может помочь

enter image description here

Код для переключения присоединения: ВЫБРАТЬ p.id_product, pm.price

FROM comp_product p 
       LEFT OUTER JOIN comp_product_marchand pm ON 
           p.id_product=pm.id_product 
           AND id_marchand=4 ; 
+0

Вы не можете поместить в предложение WHERE id_marchand = 4, потому что когда comp_product_marchand не существует таким образом, вы сокращаете эти строки –

+0

Я предполагал, что это было просто фильтрование для этого торговца? Таким образом, его запрос возвращает цены и продукты только для торговца. –

+0

Спасибо за помощь, ваша диаграмма мне очень поможет! ;) –