Для этой проблемы рассмотрим следующие 3 таблицы:
Event
id (pk)
title
Event_Category
event_id (pk, fk)
category_id (pk, fk)
Category
id (pk)
description
Довольно тривиально, я думаю ... :) Каждое событие может попасть в ноль или более категорий, всего есть 4 категории.
В моем приложении я хочу просматривать и редактировать категории для определенного события. Графически событие будет отображаться вместе со ВСЕМИ категориями и флажком, указывающим, попадает ли событие в категорию. Изменение и сохранение выбора приведет к модификации промежуточной таблицы Event_Category.
Но сначала: как выбрать это для конкретного события? Запрос, который мне нужен, на самом деле всегда будет возвращать 4 строки, количество имеющихся категорий.
После возвращает только записи для категорий, в которые попадает событие с id = 11. Эксперимент с внешними объединениями не дал больше строк в результате.
SELECT e.id, c.omschrijving
FROM Event e
INNER JOIN Event_Categorie ec ON e.id = ec.event_id
INNER JOIN Categorie c ON c.id = ec.categorie_id
WHERE e.id = 11
Или я должен начать с таблицы категорий в запросе? Надеюсь на некоторые подсказки :)
ТИА, Клаас
UPDATE:
Да, но я все еще не нашел ответ. Но я упростил эту проблему, исключив таблицу «Событие» из запроса, поскольку эта таблица используется только для просмотра описаний событий.
SELECT * from Categorie c LEFT JOIN Event_Categorie ec ON c.id = ec.categorie_id WHERE ec.event_id = 11;
Упрощенный запрос к двум таблицам использует только таблицу поиска и таблицу ссылок, но по-прежнему возвращает только 2 строки вместо 4-х строк в таблице категорий.
Я полагаю, что предложение WHERE применяется после объединения, поэтому строки, не присоединенные к таблице ссылок, исключаются. В своем приложении я решил проблемы с помощью подзапроса, но мне все еще хотелось бы узнать, какое решение лучше.