Как проверить, что все элементы массива существуют в разделе Где в SQL - PullRequest
0 голосов
/ 02 сентября 2018

Я столкнулся с одной проблемой при создании одного SQL-запроса. На самом деле я хочу проверить, существует ли в котором пункт «Все» или нет, если в предложении «где есть все элементы», то я хочу вернуть эти записи с помощью groupby. Вот моя единственная таблица produt_categories: -

id product_id  category_id
 1    1              1
 2    1              2

Соу, когда я применяю, Где, Как показано ниже: -

SELECT * FROM `product_categories` 
WHERE  category_id in (1,2,3) group by(product_id);

Теперь верните мне этот результат: -

id product_id  category_id
 1    1              1

На самом деле его возвращение мне хорошо, потому что фактическое поведение условия whereIn. Так что я хочу, если все category_id 1,2,3 существует, то он должен показывать записи. Если я пройду 1,2, тогда я тоже приду. Надеюсь, вы, ребята, понимаете. Пожалуйста, помогите мне создать Qyuery

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете использовать HAVING:

SELECT * 
FROM `product_categories` 
WHERE  category_id in (1,2,3) 
group by(product_id)
HAVING COUNT(DISTINCT category_id) = 3;  -- #elements from `IN` clause

SELECT * FROM tab GROUP BY col - это анти-паттерн.

Статья по теме: Группировка по предложению в mySQL и postgreSQL, почему ошибка в postgreSQL?

...