Postgresql 如何在postgis上使用子查询作为几何参数?
我需要比较postgis上的一些空间数据,但我需要与另一个表卡历史中的非几何数据进行比较,该表卡包含使用ST_GeomFromText函数所需的lat和长字段。 但是我如何在一个查询中完成它呢? 因为我正在研究php witch不相关,所以进行大量查询将是非常痛苦的 我正在尝试这样的事情:Postgresql 如何在postgis上使用子查询作为几何参数?,postgresql,subquery,postgis,Postgresql,Subquery,Postgis,我需要比较postgis上的一些空间数据,但我需要与另一个表卡历史中的非几何数据进行比较,该表卡包含使用ST_GeomFromText函数所需的lat和长字段。 但是我如何在一个查询中完成它呢? 因为我正在研究php witch不相关,所以进行大量查询将是非常痛苦的 我正在尝试这样的事情: SELECT ST_Distance_Sphere (ST_GeomFromText('POINT( (SELECT DISTINCT ON (userid) long from card_h
SELECT ST_Distance_Sphere
(ST_GeomFromText('POINT(
(SELECT DISTINCT ON (userid) long from card_history)
(SELECT DISTINCT ON (userid) lat from card_history))',4326),
ST_GeomFromText('POINT(17.0712215 48.15825)',4326)
)
但子查询似乎不能作为POINT的参数。
请帮助试试这个
WITH
lon AS (
SELECT DISTINCT ON (userid) AS long from card_history
),
lat AS (
SELECT DISTINCT ON (userid) AS lat from card_history
)
SELECT ST_Distance_Sphere(ST_GeomFromText(
'POINT(' || lon.lon || ' ' || lat.lat || ',4326'),
ST_GeomFromText('POINT(17.0712215 48.15825)',4326))
FROM lon, lat;
试试这个
WITH
lon AS (
SELECT DISTINCT ON (userid) AS long from card_history
),
lat AS (
SELECT DISTINCT ON (userid) AS lat from card_history
)
SELECT ST_Distance_Sphere(ST_GeomFromText(
'POINT(' || lon.lon || ' ' || lat.lat || ',4326'),
ST_GeomFromText('POINT(17.0712215 48.15825)',4326))
FROM lon, lat;
试试这个
WITH
lon AS (
SELECT DISTINCT ON (userid) AS long from card_history
),
lat AS (
SELECT DISTINCT ON (userid) AS lat from card_history
)
SELECT ST_Distance_Sphere(ST_GeomFromText(
'POINT(' || lon.lon || ' ' || lat.lat || ',4326'),
ST_GeomFromText('POINT(17.0712215 48.15825)',4326))
FROM lon, lat;
试试这个
WITH
lon AS (
SELECT DISTINCT ON (userid) AS long from card_history
),
lat AS (
SELECT DISTINCT ON (userid) AS lat from card_history
)
SELECT ST_Distance_Sphere(ST_GeomFromText(
'POINT(' || lon.lon || ' ' || lat.lat || ',4326'),
ST_GeomFromText('POINT(17.0712215 48.15825)',4326))
FROM lon, lat;
AS上或其旁边的Sintax错误,但如果我删除,将返回与以前相同的Sintax错误:错误:解析错误-无效几何体提示:POINT得到它,只需在此处发布查询,我就可以根据@zero323 answer找到它。使用lon作为用户ID上的SELECT DISTINCT long from card|U history,lat作为用户ID上的SELECT DISTINCT lat from card|U history选择ST|U SPARECEST|GEOMFROM TEXT'POINT'| lon.long|||lat.lat|,ST|GEOMFROM TEXT'POINT17.0712215 48.15825',lon,lat;它是@grouch-answer:lat/lon不应该有两个不同的选择,它应该是相同的选择,否则它将是AS上或AS旁边的外部joinstax错误,但是如果我删除,将返回与之前相同的sintax错误:错误:解析错误-无效几何体提示:POINT得到了它,只要在这里发布查询,我就可以根据@zero323-answer找到答案。使用lon作为用户ID上的SELECT DISTINCT long from card|U history,lat作为用户ID上的SELECT DISTINCT lat from card|U history选择ST|U SPARECEST|GEOMFROM TEXT'POINT'| lon.long|||lat.lat|,ST|GEOMFROM TEXT'POINT17.0712215 48.15825',lon,lat;它是@grouch-answer:lat/lon不应该有两个不同的选择,它应该是相同的选择,否则它将是AS上或AS旁边的外部joinstax错误,但是如果我删除,将返回与之前相同的sintax错误:错误:解析错误-无效几何体提示:POINT得到了它,只要在这里发布查询,我就可以根据@zero323-answer找到答案。使用lon作为用户ID上的SELECT DISTINCT long from card|U history,lat作为用户ID上的SELECT DISTINCT lat from card|U history选择ST|U SPARECEST|GEOMFROM TEXT'POINT'| lon.long|||lat.lat|,ST|GEOMFROM TEXT'POINT17.0712215 48.15825',lon,lat;它是@grouch-answer:lat/lon不应该有两个不同的选择,它应该是相同的选择,否则它将是AS上或AS旁边的外部joinstax错误,但是如果我删除,将返回与之前相同的sintax错误:错误:解析错误-无效几何体提示:POINT得到了它,只要在这里发布查询,我就可以根据@zero323-answer找到答案。使用lon作为用户ID上的SELECT DISTINCT long from card|U history,lat作为用户ID上的SELECT DISTINCT lat from card|U history选择ST|U SPARECEST|GEOMFROM TEXT'POINT'| lon.long|||lat.lat|,ST|GEOMFROM TEXT'POINT17.0712215 48.15825',lon,lat;这是@grouch回答:lat/lon不应该有两个不同的选择,它应该是相同的选择,否则它将是一个外部连接