У меня есть две таблицы в SQL, одна с проектом и одна с категориями, к которым принадлежат проекты, т. Е. JOIN будет выглядеть примерно так:
Project | Category
--------+---------
Foo | Apple
Foo | Banana
Foo | Carrot
Bar | Apple
Bar | Carrot
Qux | Apple
Qux | Banana
(Строки заменены на идентификаторы из более высокой нормальной формы, очевидно, но здесь вы поймете смысл).
Что я хочу сделать, так это разрешить фильтрацию так, чтобы пользователи могли выбирать любое количество категорий, и результаты будут фильтроваться по элементам, которые являются членами всех выбранных категорий. Например, если пользователь выбирает категории «Apple» и «Banana», появляются проекты «Foo» и «Qux». Если пользователь выбирает категории «Apple», «Banana» и «Carrot», то отображается только проект «Foo».
Первое, что я попробовал, был простой проект SELECT DISTINCT FROM ... WHERE Category = 'Apple' и Category = 'Banana', но, конечно, это не работает, поскольку Apple и Banana отображаются в одном столбце в две разные строки для любого общего проекта.
GROUP BY и HAVING не приносят мне никакой пользы, поэтому скажите мне: есть ли очевидный способ сделать это, что я упускаю, или это действительно настолько сложно, что мне придется прибегнуть к рекурсивному присоединяется
Кстати, это в PostgreSQL, но, конечно, стандартный SQL-код всегда предпочтительнее, когда это возможно.