У меня есть две таблицы - таблица users
и таблица group
.
Пользователи однозначно идентифицируются как user_id
в таблице users
, но могут иметь несколько записей в group
table.
Таблица групп определяет, в каком group
каждом пользователе находятся столбцы name
и user_id
.
Записи в таблице group
имеют position
столбец, представляющий собой целое число, которое вручную увеличивается для каждой записи пользователя.
Я пытаюсь написать запрос, который возвращает всех пользователей в имени группы A
, у которых нет группы B
какследующий инкрементный номер, который был в столбце position
записи группы A
.
Другими словами, все записи, которые находятся в группе A
в любом position
, должны иметь последующую записьв группе B
следующим шагом position
.Я хочу найти все записи, где это НЕ соответствует действительности.
GROUPS TABLE
| user_id | name | position |
| ------------- |:-------------:| ---------:|
| 1 | A | 14 |
| 1 | B | 15 |
| 2 | A | 22 |
| 2 | B | 24 |
| 2 | C | 23 | <-- Query Should return this row
Пока что я могу получить пользователей, которые находятся в группе A
, а не B
, но я не знаюкак выполнить позиционную часть, так как я считаю, что она должна использовать какую-то переменную или что-то в этом роде.
Это то, что я имею до сих пор.
SELECT DISTINCT user_id
FROM groups g
WHERE
exists (
SELECT 1 from groups WHERE user_id = g.user_id AND name = 'A'
)
and not exists (
SELECT 1 from groups WHERE user_id = g.user_id AND name != 'B'
)