如何检查postgresql中where子句中的升序有序列值?

时间:2017-02-02 10:54:27

标签: postgresql where

我是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中提出了这个问题。

0 个答案:

没有答案