SQL从具有内连接的表中选择自身

时间:2013-05-29 13:59:45

标签: sql sqlite

我有一张桌子(实际上是一个视图)

id INTEGER, x1 INTEGER, y1 INTEGER, x2 INTEGER, y2 INTEGER

现在我需要选择所有行的id,对于该行,给定行的所有值的总和低于零,

  

x1 + y1 + x2 + y2 + x3 + y3 + x4 + y4< 0

实际上我有更复杂的公式,但现在没关系。我知道我必须自己创建这个表的INNER JOIN,但仍然无法构成正确的表达式。

我使用SQLite + Python,如果重要的话。表中大约有100 000行,有效结果可以从all到none。

2 个答案:

答案 0 :(得分:0)

如果我理解你所追求的是什么,那么应该这样做:

SELECT a.id
FROM mytable a
JOIN mytable b ON b.id=some_special_value
WHERE a.x1 + a.x2 + a.y1 + a.y1 + b.x1 + b.x2 + b.y1 + b.y2 < 0

答案 1 :(得分:0)

你需要获得下一行。我假设这是一个大于给定行的id的最小id。下面使用相关子查询计算下一个id,然后加入下一行的信息:

select *
from (select t.*,
             (select t2.id from t t2 where t2.id > t.id order by t2.id limit 1
             ) nextId
      from t
     ) t left outer join
     t tnext
     on t.nextId = tnext.Id
where (t.x1 + t.y1 + t.x2 + t.y2) + (tnext.x1 + tnext.y1 + tnext.x2 + tnext.y2) < 0

然后,您可以访问ttnext中的字段。

如果知道下一行的id比上一行大1,那么您可以将其简化为:

select *
from t left outer join
     t tnext
     on t.id + 1 = tnext.id
where (t.x1 + t.y1 + t.x2 + t.y2) + (tnext.x1 + tnext.y1 + tnext.x2 + tnext.y2) < 0
相关问题