@MasterCopipaster

Как заменить where exists на join в моем случае?

Доброе время суток, столкнулся с проблемой, есть запрос SQL который работает довольно долго

select
	*
from
	`brands`
where
	exists (
	select
		*
	from
		`products`
	where
		`brands`.`id` = `products`.`brand_id`
		and `show` = 1
		and exists (
		select
			*
		from
			`categories`
		where
			`products`.`category_id` = `categories`.`id`
			and (`id` = 9
				or `parent_id` = 9)))


Знаю что люди как то переписывают их на join что бы быстрее работало опирался на похожий случай

Пытался переписать так:

SELECT
	*
from
	brands
inner join products ON
	`brands`.id = `products`.brand_id
left join categories ON
	`products`.`category_id` = `categories`.`id`
where
	products.`show` = 1 and (categories.id = 9 or categories.parent_id = 9);


Но данных приходит больше чем надо

В первом случае вернет 6 записей а во втором 16

Собственно есть идеи как поправить запрос?
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
@MasterCopipaster Автор вопроса
Все сам допер
SELECT
  DISTINCT `brands`.*
from
  brands
inner join products ON
  `brands`.id = `products`.brand_id
left join categories ON
  `products`.`category_id` = `categories`.`id`
where
  products.`show` = 1 and (categories.id = 9 or categories.parent_id = 9);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы