Предположим, у меня есть две таблицы:
Пользователь таблицы:
ID Name
1 User A
2 User B
3 User C
4 User D
5 User E
Разрешение таблицы:
ID UserID PermissionName
1 1 read
2 3 read
3 3 write
4 5 read
5 5 write
6 5 admin
Теперь я хочу получить следующие запросы:
1- Все пользователи с правами на запись
SELECT u.* FROM user u, permission p WHERE p.userID = u.id AND p.name = 'write' GROUP BY u.id;
Кажется, все в порядке. Возвращает пользователя 3 и 5.
2- Все пользователи без разрешения на запись
SELECT u.* FROM user u, permission p WHERE p.userID = u.id AND p.name != 'write' GROUP BY u.id;
Возвращает: 1,3,5
Ожидаемое: 1,2,4
Это не работает. Он возвращает каждого пользователя, кроме тех, которые имеют только разрешение на запись. Итак, как я могу заставить это работать в MySQL и SQLite?
3- комбинации обоих
- Все пользователи с возможностью чтения и записи (3,5)
- Все пользователи с правами чтения и записи (1)
- и т.д.