Как проверить значение возрастающего упорядоченного столбца в предложении where в postgresql?
Я новичок в 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 (как упоминалось в запросе 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 для каждой строки, и cls.gid, соответствующий этому start_id, должен быть помещен в эту строку. Предположим, четыре строки моей таблицы ребер следующие:
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. Итак, я поднял этот вопрос в stackru вместо gis.stackexchange.