SQL连接逻辑顺序

时间:2016-10-13 16:25:19

标签: sql

我有两个表:ITEM(ID,GROUP)和STATE(ID,STATE)

Tables

我需要的是一个SQL查询,它返回组中的所有项目,前一项的状态从“完成”更改为“打开”。之前的项目被定义为同一组中ID最小的项目。

在示例中,我希望Id = 2作为结果,因为它在组'A'中,而前一项Id = 1的项目处于'完成'状态。

我尝试了很多方法,但我完全陷入困境......

1 个答案:

答案 0 :(得分:1)

一种方法使用exists。这几乎是您的问题陈述的直接翻译:

select i.*
from items i join
     state s
     on i.id = s.id
where s.state = 'OPEN' and
      exists (select 1
              from items i2 join
                   states s2
                   on i2.id = s2.id
              where s2.state = 'DONE' and i2.grp = i.grp and s2.id < s.id
             );

唯一棘手的部分是需要join在外部查询和子查询中将表格组合在一起。