我有两个表-users
表和group
表。
用户在user_id
表中由users
唯一标识,但在group
表中可以有多个条目。
组表通过group
和name
列指示每个用户属于哪个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
答案 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)
)