2014-11-21 4 views
0

Вот мой запрос:внутреннее соединение применяется условие только одной таблицы

SELECT p.product_id,p.title,p.price,p.total_sales,p.total_revenue,p.timestamp,i.image_id 
FROM products AS p 
INNER JOIN products_images AS i 
ON p.product_id = i.product_id 
WHERE p.account_id = ? AND p.deleted=0 AND i.featured=1 

Я хочу получить i.image_id WHERE i.featured = 1, но я не знаю, как применить это условие, так что это относится только к таблице изображений. Запрос работает, но я не получаю все мои результаты из таблицы продуктов, всего одну строку.

Очевидно, что в некоторых случаях может отсутствовать изображение imageid, где featured = 1. Поэтому в этом случае придется выплюнуть что-то еще.

ответ

1

Изменить его

FROM products AS p 
left outer join products_images AS i 
ON p.product_id = i.product_id 
AND i.featured=1 
WHERE p.account_id = ? AND p.deleted=0")) 
+0

Это отличное спасибо :) –

1

Использование LEFT JOIN, таким образом, вы получите результаты, даже если нет изображения. Вы получите одну строку для каждого найденного изображения. Если это нежелательно, используйте GROUP BY p.product_id, чтобы получить каждый товар только один раз.

И да, поставьте условие AND i.featured=1 на инструкцию ON, как указано @Abercrombieande.

+0

Хороший совет, чтобы избежать ошибок благодаря :) –