У меня есть 3 таблицы: пользователь, группы и группы пользователей.
Группы пользователей содержат идентификатор пользователя и группу идентификатора группы.
У пользователя есть id_user, а у группы есть id_group.
Мой вопрос будет:
Как извлечь данные из всех 3 таблиц для достижения следующего:
- Список всех групп в таблице групп
- Список групп в таблице UserGroup, которая была выбрана
- Список пользователей, которых нет в группах пользователей в таблице пользователей.
- Список пользователей, принадлежащих группе в таблице групп пользователей.
У меня есть следующие операторы SQL, но я бы хотел объединить их в оператор 1 sql. Возможно ли это?
select * from grupos
и
SELECT DISTINCT usuarios.id_usuario
FROM usuarios
WHERE usuarios.id_usuario
NOT IN (SELECT DISTINCT id_usuario FROM usuarios_grupos)
При этом первый запрос отображает:
Groups
- John
- Тим
- Jane
Второй запрос показывает следующее:
User
1. John
2. Jane
3. Tom
User Group
Empty
After selection of John:
User
2. Jane
3. Tom
User Group
1. John
Instead of having the following (which I have now):
User
1. John
2. Jane
3. Tom
After Selection of John:
UserGroup
1. John
Подобно тому, что я продемонстрировал выше, если я выберу группу и пользователя и добавлю их в группы пользователей. Пользовательские группы будут отображать «Группа, Пользователь». (Например, развитие, Том).
Однако таблица данных групп будет по-прежнему отображаться следующим образом:
- Разработка
- Web
- Проекты
Вместо этого таблица данных пользователя будет «обновлена»:
- Тим
- Джейн.
Я попробовал следующее, но не получил желаемых результатов:
SELECT grupos.id_grupo, usuarios.id_usuario
FROM usuarios_grupos
INNER JOIN
grupos
ON
usuarios_grupos.id_grupo = grupos.id_grupo
INNER JOIN
usuarios
ON
usuarios_grupos.id_usuario = usuarios.id_usuario
WHERE
usuarios.id_usuario
NOT IN (SELECT DISTINCT id_usuario FROM usuarios_grupos)