Задавайте вопросы, мы ответим
Вы не зашли.
Привет всем)
Помогите разобраться с такой задачей.
Есть такие таблицы:
Products (id, name) - таблица товаров
Property_product (id, name) - х-ки товаров
Products_TO_Property_product (id_product, id_property_product) - промежуточная таблица связей
Допустим нужно выбрать все товары у которых свойства id_property_product (3 и 20 и 7)?
То есть, чтобы у этих товаров присутствовали все свойства, а не допустим только одно из них.
Буду очень благодарен за ответы.
Неактивен
Неактивен
Спасибо!!! Супер, всё работает. Вы могли бы объяснить вот эту часть запроса group by 1 having count(*)=3
Заранее благодарен!
Неактивен
group by 1 having count(*)=3 -- сгрупировать по полю id_product и оставить только имеющих 3 совпадения.
выполните для наглядности след запросы:
Неактивен
Теперь задача усложняется.
В этом запросе из промежуточной таблицы (Products_TO_Property_product) выбираются id_product:
select id_product from Products_TO_Property_product where id_property_product in (3,20,7) group by 1 having count(*)=3; выбираются id_product.
Нужно выбрать название товара (name) из таблицы Products (id, name).
Как я понимаю нужно использовать INNER JOIN
У меня получился такой запрос:
SELECT Products_TO_Property_product.id_product, Products.name FROM Products INNER JOIN Products_TO_Property_product ON Products_TO_Property_product.id_product=Products.id WHERE id_property_product in (3,20,7) group by 1 having count(*)=3;
Но что-то он не правильно работает...
В чём может быть причина?)
Неактивен
Неактивен
Спасибо огромное!!!
Насколько прожорлив данный запрос?
Неактивен
Что вы под этим подразумеваете?
Неактивен
Если в таблицах будет большое количество записей. Данный запрос, будет выполняться слишком долго?
Наверное глупый вопрос, легче заполнить таблицы и самому проверить)
Но всё же?
Неактивен
1. долго понятие относительное
2. результат зависит от многих параметров, хотя при наличии индексов план выполнения будет простой.
Неактивен
Спасибо за ответы. Вы мне очень помогли!!!
Неактивен