2

次のクエリを実行して、特定のポイントのラスターレコードの値を抽出する必要があります。

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

しかし、次のエラーが発生します。

エラー:式SQL状態として使用されるサブクエリによって返される複数の行:21000

この関数に必要なレコードは1つだけですが、すべてのレコードの値を抽出する必要があります。

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 st_value(rast),
       st_GeomFromText('POINT(30.424 -1.978)', 4326)
from mytable
于 2012-10-24T09:42:45.327 に答える
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 に答える