我有两个表 - a users
表和一个group
表。
用户由 user_id
唯一标识在 users
表,但 group
中可以有多个条目表。
组表规定了哪个 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'
)
最佳答案
我会使用左连接
:
select g.*
from groups g left join
groups gb
on gb.user_id = g.user_id and
gb.position = g.position + 1 and
gb.name = 'B'
where g.name = 'A' and gb.name is null;
关于mysql - SQL按一组获取用户并增量位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55371428/