sql - 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 中完成大量查询,它可能效率不高并且不必要地花费很长时间。
我想知道是否有一种方法可以仅使用几个查询或创建额外的表来完成......我还没有想出最好的解决方案。
解决方案
你在找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
推荐阅读
- php - 如何查看数据库中是否已经存在随机数?
- dask - dask 集群不使用所有核心
- json - Angular Material 表仅按最后一列排序
- c# - 在.net 中不使用 Response.Redirect(url) 的情况下重定向到自定义页面?
- html - 无法在 Shiny App 中放置徽标/图像
- excel - 宏 - 将由复选框触发的同一行中的某些单元格复制到不同的工作表
- c# - 迭代 IEnumerable 数据行时如何避免空引用异常?
- python - 哪种技术最适合使用 python 识别同一文本中的各种情绪?
- mysql - 如何使用 On Delete = Set Null 创建外键?
- weebly - 如何控制 Google Chrome 标签上的标题?