我需要运行以下查询来提取特定点的栅格记录的值。
select st_value((select rast from mytable),
(select st_GeomFromText('POINT(30.424 -1.978)', 4326)))
但我遇到以下错误:
错误:用作表达式的子查询返回多行 SQL 状态:21000
此功能只需要一条记录,但我需要提取所有记录的值。
我需要运行以下查询来提取特定点的栅格记录的值。
select st_value((select rast from mytable),
(select st_GeomFromText('POINT(30.424 -1.978)', 4326)))
但我遇到以下错误:
错误:用作表达式的子查询返回多行 SQL 状态:21000
此功能只需要一条记录,但我需要提取所有记录的值。
如果子查询返回多行,则必须在公用表表达式(CTE /WITH
查询)中使用它和FROM alias
,或使用FROM (SELECT ...) alias
. 但是,在这种情况下,它看起来比这更简单:
select st_value(rast, st_GeomFromText('POINT(30.424 -1.978)', 4326))
FROM mytable;
这两个子查询似乎都是不必要的。
如果您真的需要子查询,您会在语法上编写如下内容:
WITH sq(rast) AS ( SELECT rast FROM mytable )
SELECT st_value(rast, st_GeomFromText('POINT(30.424 -1.978)', 4326))
FROM sq;
或者
SELECT st_value(rast, st_GeomFromText('POINT(30.424 -1.978)', 4326))
FROM (SELECT rast FROM mytable) sq(rast);
如果你有一个多列的函数,你可以做这样的事情
SELECT (info).column1, (info).column2, (info).column3
FROM (select st_value(rast, st_GeomFromText('POINT(30.424 -1.978)', 4326)) AS info
FROM mytable
) AS foo
尝试:
Select st_value(rast),
st_GeomFromText('POINT(30.424 -1.978)', 4326)
from mytable