如何在sql中为函数选择没有行id和列名的结果值?

如何在sql中为函数选择没有行id和列名的结果值?,sql,postgresql,postgis,dijkstra,pgrouting,Sql,Postgresql,Postgis,Dijkstra,Pgrouting,我做pgRouting,我需要从我的选择将整数结果插入dijkstra算法 SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry FROM pgr_dijkstra( 'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads', 34, 3000, false ) as di JOIN planet_osm_roads

我做pgRouting,我需要从我的
选择
将整数结果插入dijkstra算法

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
  FROM pgr_dijkstra(
'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
34, 3000, false
  ) as di
  JOIN planet_osm_roads pt
  ON di.edge = pt.osm_id ;
这是可行的,但如果我想用此查询替换dijkstra函数中的节点34,例如用my street的节点号:

SELECT pl.source::integer 
FROM planet_osm_roads pl 
WHERE pl.name LIKE ''street_name'' 
LIMIT 1
加在一起:

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
  FROM pgr_dijkstra(
'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
'SELECT pl.source::integer FROM planet_osm_roads pl WHERE pl.name LIKE ''street_name'' LIMIT 1',
 3000, false
  ) as di
  JOIN planet_osm_roads pt
  ON di.edge = pt.osm_id ;
它将失败并出现错误:

我认为,这是因为我的select查询返回了带有行ID和列名的sql结果。但可能还有另一个问题

如何将其仅输出为单个整数


不要将查询作为字符串传递:

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
FROM pgr_dijkstra(
  'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
  (SELECT pl.source::integer FROM planet_osm_roads pl WHERE pl.name LIKE 'street_name' LIMIT 1),
   3000, false
) as di
  JOIN planet_osm_roads pt
  ON di.edge = pt.osm_id;
或者使用派生表

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
FROM (
  SELECT pl.source::integer as source
  FROM planet_osm_roads pl 
  WHERE pl.name 
  LIKE 'street_name' LIMIT 1
) pl 
  join lateral pgr_dijkstra(
    'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
    pl.source,
    3000, false
  ) as di on true
  JOIN planet_osm_roads pt ON di.edge = pt.osm_id;

不要将查询作为字符串传递:

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
FROM pgr_dijkstra(
  'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
  (SELECT pl.source::integer FROM planet_osm_roads pl WHERE pl.name LIKE 'street_name' LIMIT 1),
   3000, false
) as di
  JOIN planet_osm_roads pt
  ON di.edge = pt.osm_id;
或者使用派生表

SELECT ST_AsGeoJSON(ST_Transform(way, 4326)) AS geometry
FROM (
  SELECT pl.source::integer as source
  FROM planet_osm_roads pl 
  WHERE pl.name 
  LIKE 'street_name' LIMIT 1
) pl 
  join lateral pgr_dijkstra(
    'SELECT osm_id AS id, source, target, st_length(way) as cost FROM planet_osm_roads',
    pl.source,
    3000, false
  ) as di on true
  JOIN planet_osm_roads pt ON di.edge = pt.osm_id;

Vertex是整数参数,您试图将文本放在那个里。 只需将“”改为()


这是一种方法,另一种方法是使用street name作为参数和in参数编写函数,并将geojson作为输出。

Vertex是整数参数,您试图将文本放在那里。 只需将“”改为()

这是一种方法,另一种方法是使用street name作为参数编写函数,并将geojson作为输出