В PostgreSQL у меня есть 3 таблицы:
- Таблица статей
- Таблица категорий
- Таблица, которая сопоставляет статьи с категориями
Я хочу иметь возможность находить статьи, относящиеся ко всем категориям, не зная, какие категории существуют.
Конкретный пример:
articles categories
| id | | id | name |
+-------+ +-------+ ------+
| 1 | | 1 | cat 1 |
| 2 | | 2 | cat 2 |
| 3 | | 3 | cat 3 |
category map
| article_id | category_id |
+------------+--------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
В этом случае статья, соответствующая критериям, является только статьей 1. Статья 2 не соответствует, поскольку относится только к категориям 1 и 2. Статья 3 не соответствует, поскольку не принадлежит ни к какой категории.
Если я затем добавлю другую категорию в список категорий, никакие статьи не будут совпадать. Таким образом, запрос будет зависеть от списка категорий в таблице категорий.
Я не уверен, как подойти к этому в целом.
Я думал об использовании перекрестного соединения, но общий характер таблицы категорий доставляет мне проблемы.