MySql Как вернуть все товары, которые содержат все выбранные функции - PullRequest
0 голосов
/ 01 февраля 2019
assigned_features

feature_id      |   item_id
-----------------------------------------------
1               |   1
2               |   1
3               |   1
1               |   2
2               |   2
1               |   3

Используя mysql, я пытаюсь вернуть все элементы, которые содержат все выбранные функции.

Например, я хочу вернуть элементы, где feature_id = 1 и 2. Это должно вернуть item_id 1 и 2.

В качестве альтернативы, если я хочу получить только элементы, где feature_id = 1,2и 3, результат должен дать пункт 1.

Я действительно не знаю, с чего начать.

Спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете выполнить агрегирование:

select item_id
from assigned_features af
where feature_id in (1,2)
group by item_id
having count(distinct feature_id) = 2;

Аналогично, вы можете просто увеличить счетчик для второго примера:

select item_id
from assigned_features af
where feature_id in (1,2,3)
group by item_id
having count(distinct feature_id) = 3;

Однако DISTINCT здесь избыточно, если item_idне имеет дубликатов feature_id s, тогда вы можете использовать count(*) = 2 или count(*) = 3.

...