Stack Overflow на русском Asked on December 5, 2021
Подскажите плиз, есть запрос который вытягивает все нужные мне 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
? Помогите, пожалуйста составить правильно запрос
Так как вы не предоставили информации о названиях полей с идентификатором продукта в таблицах 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
в обоих запросах)
Answered by cauf on December 5, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP