Как проверить разные условия для одного ряда? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть строка, в которой я хочу применить к ней фильтры. И я хочу найти, например, каждый ресторан, который имеет категории = 1 и 2. Как я могу применить это к моему Sql запросу

Это мой код (только часть были):

SELECT * From establishment WHERE `subcategories`.`id` = 1 AND `subcategories`.`id` = 21;

И query возвращает меня пустым. Как мне получить результат?

Вот мои столы

Establishment
id
name


SubCategories
id
name


EstablishmentSubCategories

sub_category_id
establishment_id

1 Ответ

2 голосов
/ 20 апреля 2020

Этот запрос:

SELECT establishment_id
FROM EstablishmentSubCategories
WHERE sub_category_id IN (1, 21)
GROUP BY establishment_id
HAVING COUNT(*) = 2

возвращает нужные вам establishment_id s, поэтому вы можете использовать его с оператором IN:

SELECT * 
FROM establishment 
WHERE id IN (
  SELECT establishment_id
  FROM EstablishmentSubCategories
  WHERE sub_category_id IN (1, 21)
  GROUP BY establishment_id
  HAVING COUNT(*) = 2
)

или с EXISTS:

SELECT e.* FROM establishment e
WHERE
  EXISTS(SELECT 1 FROM EstablishmentSubCategories c WHERE c.establishment_id = e.id AND sub_category_id = 1)
  AND 
  EXISTS(SELECT 1 FROM EstablishmentSubCategories c WHERE c.establishment_id = e.id AND sub_category_id = 21)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...