LEFT JOIN, как правильно составить запрос
Подскажите плиз, есть запрос который вытягивает все нужные мне product_id:
SELECT product_id
FROM oc_product_attribute
WHERE
text IN (".$get_material_item.")
AND product_id IN (
SELECT product_id
FROM oc_product_attribute
WHERE text IN (".$get_ves_item.")
)
GROUP BY product_id
Нужно с другой таблицы 'product' получить 'price' и 'image', а с другой таблицы 'product_description' получить 'name'. Тут нужен Left Join? Помогите, пожалуйста составить правильно запрос
Ответы (1 шт):
Так как вы не предоставили информации о названиях полей с идентификатором продукта в таблицах product и product_description, предположу, что существует поле product.id и product_description.product_id.
По поводу Left Join - важно понимать, что Left и Right лишь определяют условную сторону, с которой находится целевая таблица при объединении и практически любое соединение можно написать как в левую сторону, так и в правую. Вам нужно об этом почитать подробнее - концепция совсем не сложная. В комментариях дали пару неплохих ссылок [1] [2]
Приняв указанные выше допущения, результирующий запрос может выглядеть следующим образом:
SELECT
oca.product_id,
pr.price,
pr.image,
pd.name
FROM
oc_product_attribute AS oca
LEFT JOIN
product AS pr ON pr.id = oca.product_id
LEFT JOIN
product_description AS pd ON pd.product_id = oca.product_id
WHERE
text IN (".$get_material_item.")
AND oca.product_id IN (
SELECT oca2.product_id
FROM oc_product_attribute AS oca2
WHERE text IN (".$get_ves_item.")
)
GROUP BY
oca.product_id
Обращу внимание, что при повторном указании таблицы в секции FROM в подзапросе, важно разделить вызовы таблиц через алиасы (псевдонимы). В частности, обратите внимание, что таблица oc_product_attribute имеет алиасы oca и oca2. В противном случае вы можете получить некорректную обработку подзапроса (в частности может случится так, что курсоры базы данных в основном запросе и подзапросе будут всегда работать синхронно и, как следствие, вы получите один и тот же product_id в обоих запросах)