Я думаю, что на этот вопрос можно было ответить раньше, но я не могу его найти: все результаты, которые я нашел, не являются решением этой проблемы ...
Давайте предположим, что в моей базе данных есть следующеетаблицы и отношения (и я не могу их изменить):
- Объекты: пользователь, рабочая группа и очередь
- Один пользователь может содержаться во многих рабочих группах, одна рабочая группа может иметь много пользователей.
- Одна рабочая группа может иметь много очередей, одна очередь может принадлежать многим рабочим группам.
- Есть две таблицы, устанавливающие эти отношения «многие ко многим»: m2m_user_wg, m2m_wg_queue
У меня есть такой запрос:
SELECT U.LOGIN, WG.WORKGROUP, Q.QUEUE
FROM USER U, M2M_USER_WG MUW, WORKGROUP W, M2M_WG_QUEUE MWQ, QUEUE Q
WHERE U.ID = MUW.WORKGROUP2USER
AND W.ID = MUW.USER2WORKGROUP
AND W.ID = MWQ.QUEUE2WORKGROUP
AND Q.ID = MWQ.WORKGROUP2QUEUE
AND U.LOGIN = 'johndoe'
Этот запрос работает нормально, когда все сущности имеют существующие значения, но давайте предположим, что у пользователя есть только одна рабочая группа, а у этой рабочей группы нет очереди.Идентификатор рабочей группы не будет существовать в таблице M2M_WG_QUEUE (MWQ), поэтому запрос не будет отображать результаты.
Я хочу видеть пользователя и его рабочие группы, даже если некоторые из них не имеюточереди.Примерно так:
USER WORKGROUP QUEUE
johndoe WG3 Q7
johndoe WG3 Q8
johndoe WG4 Q7
johndoe WG9
В приведенном выше примере результат должен выглядеть примерно так:
USER WORKGROUP QUEUE
johndoe WG6
Как я могу это сделать?Я думаю, что это может быть сделано с помощью соединения или (+), но я пробовал это несколькими способами, и ни один из них не сработал ...