SQL按组和递增位置获取用户

时间:2019-03-27 06:57:36

标签: mysql sql

我有两个表-users表和group表。

用户在user_id表中由users唯一标识,但在group表中可以有多个条目。

组表通过groupname列指示每个用户属于哪个user_id

group表中的条目有一个position列,该列是为每个用户的条目手动递增的整数。

我正在尝试编写一个查询,该查询返回组名A中的所有用户,这些用户没有组B作为position列中的下一个增量编号A组条目中的一个。

换句话说,任何A的{​​{1}}组中的所有条目都必须在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

2 个答案:

答案 0 :(得分:1)

我会使用left join

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;

答案 1 :(得分:0)

  

我正在尝试编写一个查询,以返回组名A中的所有用户,   没有B组作为下一个增量编号   A组条目的位置列

使用NOT EXISTS

SELECT *
FROM groups g
WHERE
  name = 'A'
  AND
  NOT EXISTS (
    SELECT 1 from groups 
    WHERE 
      user_id = g.user_id 
      AND 
      name = 'B' 
      AND 
      position = (select min(position) from groups where position > g.position)
  )