首页 > 解决方案 > 对表的每一行逐一进行特定查询

问题描述

假设我有一张桌子:

| key1 | key2 | value |
+------+------+-------+
| 1    | 1    | 1337  |
| 1    | 2    | 6545  |
| 2    | 1    | 213   |
| 3    | 1    | 131   |

我想做的是逐行遍历这个表,然后在进一步的查询中使用键两个值(所有其他表都包含这两个键+其他数据的唯一组合)

我如何在 SQL 中做这种事情?

编辑:我想从第 1 行 (1,1) 中提取 key1, key2 然后对其进行查询,这将产生一个数字。

然后我会移动到第二行,一个相同的查询会再次产生一个数字。

然后将所有这些数字插入到预先准备好的视图中。

EDIT2:我需要遍历它,因为我的数据库的具体用途。

它是一个包含扇区的行星数据库(键是这两个的 ID)。所有这些区域都包含资源、炮塔和城墙。我在帖子中的表格是扇区表的示例,其值是敌军。

资源表、炮塔等包含这两个键,因此它们链接到并且仅链接到特定扇区。

我需要逐行进行,以便我可以使用此键从我的表中仅选择特定的资源/炮塔/墙,将它们汇总,然后从我的扇区表中的值中减去它们。然后将生成的数字插入到预先准备好的视图中(同样,插入到与我的两个键组合匹配的行中)

标签: sqlpostgresql

解决方案


这听起来像是一个相关的子查询或横向连接。你没有那么多解释,但像这样:

select t1.*, t2.*
from table1 t1 cross join lateral
     (select . . .
      from table2 t2 . . .
      where t2.key1 = t1.key1 and t2.key2 = t1.key2
     ) t2

您不清楚第二个查询是什么样的。该where子句称为相关子句。它将子查询连接到外部查询。并非严格需要相关子句才能使其正常工作。

外部查询的列可以在子查询的其他地方使用。我只是假设一个平等条件将两者联系起来(缺乏其他信息)。


推荐阅读