我是postgresql的新手。如果第二个表的几何包含第一个表的几何,我想连接两个表。所以,我已经编写并执行了以下这部分查询,并且运行正常。
select edge.start_id, cls.gid
from edge_table edge
inner join cluster_info cls on st_contains(cls.geom,st_setsrid(edge.start_geom,3067));
但它以随机顺序给出了start_id及其包含的geom id(如查询中提到的cls.gid),如下所示:
start_id gid
26040 2493
43323 2490
26208 2400
42754 2433
43537 2434
1379 2434
43570 2904
42887 2475
43689 2495
43211 2904
但是我需要在我的边缘表中将结果插入另一个名为start_cls的列中。我需要确定应插入cls.gid的行。因此,我需要检查每行的start_id值,并将与该start_id对应的cls.gid放入该行。假设我的边缘表有四行:
gid start_id end_id start_geom end_geom start_cls end_cls
1 81608 81608 01010000007368912D8B622341E5D022EBEAF65A41 01010000007368912D8B622341E5D022EBEAF65A41
2 81557 81520 010100000085EB51F89C0723418B6CE7DB9F8E5A41 0101000000986E1203DE0723416DE7FB51A38E5A41
3 189898 80812 01010000006F1283C0A093214179E926F1A1005B41 0101000000BE9F1A6FF3942141022B871EEC005B41
4 80952 80476 0101000000666666E67F832341F2D24DBA38B45A41 0101000000736891EDB48423413BDF4F755AB45A41
我需要先填写start_cls列。因此,cls.gid值为81608(第一个start_id)应位于start_cls列下的第一行。所以,我给出了一个where子句如下:
select edge.start_id, cls.gid
from edge_table edge
inner join cluster_info cls on st_contains(cls.geom,st_setsrid(edge.start_geom,3067))
where (select start_id from edge_table) = edge.start_id;
但是,它给出了以下错误:
ERROR: more than one row returned by a subquery used as an expression
********** Error **********
ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000
我也尝试了以下查询,但没有运气。
select edge.start_id, cls.gid
from edge_table edge
inner join cluster_info cls on st_contains(cls.geom,st_setsrid(edge.start_geom,3067))
where (select start
from (select start_id as start
from edge_table) as s) = edge.start_id;
请帮助解决此问题。它有一些几何部分但主要问题在于postgresql查询组织。所以,我在stackoverflow而不是gis.stackexchange中提出了这个问题。