@Chesterfield25

Как правильно выбрать все товары?

У меня есть три таблицы products в которую добавляются все продукты, country в которую добавляются все страны и product_country в которую добавляются все id продуктов
product_id а на против country_id все id стран которым принадлежат продукты или в которых они продаются.
631ae5185b52f758704916.png
Как мне выбрать только те продукты у которых есть и country_id=1 и country_id=2 и если нужно будет то иcountry_id=3
  • Вопрос задан
  • 108 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
SELECT p.name, p.id 
FROM products AS p
JOIN product_country AS cp ON cp.product_id = p.id 
WHERE cp.country_id IN (1,2)
GROUP BY 1, 2
HAVING COUNT(DISTINCT cp.country_id) = 2;
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
В 2 странах
select * from products where (select count(*) from product_country where product_country.product_id = products.id and product_country.country_id in (1,2)) == 2;

В 3 странах
select * from products where (select count(*) from product_country where product_country.product_id = products.id and product_country.country_id in (1,2,3)) == 3;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Для человека, который только-только осваивает азы SQL, важно для начала понять, как работает вот такой базовый вариант. Как вообще таблицы соединяются между собой.
select p.* from products p 
join product_country pc1 on pc1.product_id=p.id and pc1.country_id=1 
join product_country pc2 on pc2.product_id=p.id and pc2.country_id=2

[inner] join находит все записи из левой таблицы, для которых есть соответствие в правой таблице, и которые удовлетворяют условию в ON.
Соответственно, первый джойн отбирает все записи, которые соответствуют country_id=1,
а второй - оставляет из получившегося набора только те, которые соответствуют и country_id=2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы