首页 > 解决方案 > SQL:从数据表中减去某些有限制的行到一个新表中

问题描述

我在 postgresql 中有一个数据表,其中包含这些列和一些行,如下所示:

英石 纪元 卫星 l1 l2 c1 p1 p2
1 1 1 10 11 12 13 14
1 1 2 15 16 17 18 19
1 2 1 20 21 22 23 24
1 2 2 25 26 27 28 29
20 1 1 30 41 52 63 74
20 1 2 75 76 87 88 无效的
20 2 1 ...

我想获得一些对 epochnum 和 satnum 具有相同值但在“st”中具有不同值的行。顺便说一句,我有一个列表,指定应该减去哪些“st”对。它只是另一个看起来像这样的表:

st1 st2
1 20

第一个表中的行必须根据该表在 l1,l2,c1,p1 和 p2 中减去具有相同 epochnum 和 satnum 的行,然后插入到新表中,如下所示:

纪元 st1 st2 卫星 dl1 dl2 直流1 dp1 dp2
1 1 20 1 20 30 40 50 60
1 1 20 2 65 65 75 75 无效的
...

实际数据有超过 400000 行具有相同的 epochnums 和 satnums 像这样。我在 net-beans 中尝试过 java 编程,并使用循环来简单地获取每一行的查询并创建新表。

但我认为由于必须在 java 中完成大量查询,它可能效率不高并且不必要地花费很长时间。

我想知道是否有一种方法可以仅使用几个查询或创建额外的表来完成......我还没有想出最好的解决方案。

标签: sqlpostgresql

解决方案


你在找join这样的s吗?

select t1.st, t1.epochnum, t1.satnum,
       (t2.l1 - t1.l1),
       (t2.l2 - t1.l2),
       (t2.p1 - t1.p1),
       (t2.p2 - t1.p2)
from t t1 join
     t t2
     on t1.epochnum = t2.epochnum and
        t1.satnum = t2.satnum join
     pairs p
     on t1.st = p.st1 and t2.st = p.st2

推荐阅读