mysql - SQL按一组获取用户并增量位置

标签 mysql sql

我有两个表 - 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/

相关文章:

mysql 多个外键与内连接

mysql - Rails 种子在 db :seed 时未在数据库中创建实例

mysql - 将两行合并为一行添加唯一数据

mysql - CoderPad 不支持 SQL 中的排名函数吗?

python - 将字符串列表传递给原始 sql 查询(Python/Django)

MySQL 子查询(或 UNION?)

mysql - 用于分层过滤的 RDBMS 数据库术语

sql - (1,1)在SQL中是什么意思?

SQL Server 2018如何将信息分组到不同的列中

mysql - SELECT ... FROM ... INNER JOIN ... ON 之后的结果处理