我需要运行以下查询来提取特定点的光栅记录值。
select st_value((select rast from mytable),
(select st_GeomFromText('POINT(30.424 -1.978)', 4326)))
但我遇到以下错误:
错误:用作表达式的子查询返回多行 SQL状态:21000
此功能只需要一条记录,但我需要提取所有记录的值。
答案 0 :(得分: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);
答案 1 :(得分:3)
尝试:
Select st_value(rast),
st_GeomFromText('POINT(30.424 -1.978)', 4326)
from mytable
答案 2 :(得分: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