2

我需要运行以下查询来提取特定点的栅格记录的值。

select st_value((select rast from mytable),
    (select st_GeomFromText('POINT(30.424 -1.978)', 4326)))

但我遇到以下错误:

错误:用作表达式的子查询返回多行 SQL 状态:21000

此功能只需要一条记录,但我需要提取所有记录的值。

4

3 回答 3

7

如果子查询返回多行,则必须在公用表表达式(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);
于 2012-10-24T10:00:51.703 回答
3

如果你有一个多列的函数,你可以做这样的事情

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
于 2013-11-28T11:35:51.633 回答
3

尝试:

Select st_value(rast),
       st_GeomFromText('POINT(30.424 -1.978)', 4326)
from mytable
于 2012-10-24T09:42:45.327 回答