Страница 1 из 1

ST_Intersect - more than 1 row returned by subquery

Добавлено: 24 апр 2012, 03:16
SS_Rebelious
Пытаюсь выбрать колонку таблицы объектов, попадающих в буфер:

Код: Выделить всё

SELECT dumps.land_category
FROM dumps, water_line
WHERE  ST_Intersects (dumps.geom, 
                              (SELECT ST_Buffer (water_line.geom, 100, 'endcap=flat join=round')
                               FROM water_line))
Получаю ошибку: ERROR: more than one row returned by a subquery used as an expression
SQL state: 21000

При этом

Код: Выделить всё

SELECT ST_Buffer (water_line.geom, 100, 'endcap=flat join=round')
FROM water_line
выполняется успешно.

Где я накосячил?

Re: ST_Intersect - more than 1 row returned by subquery

Добавлено: 24 апр 2012, 03:38
Aleksandr Dezhin
По всей видимости проблема в том, что поздапрос, который сам по себе работает, возвращает несколько строк, которые неизвестно как обрабатывать - грубо говоря в общем случае не ясно что к ним применить - то-ли and то-ли or то-ли еще что. Я бы для начала переписал как-то так:

Код: Выделить всё

SELECT dumps.land_category
FROM dumps
WHERE  EXISTS (
    SELECT * FROM water_line
    WHERE ST_Intersects(dumps.geom, ST_Buffer(water_line.geom, 100, 'endcap=flat join=round'))
)
Если же подзапрос возвращает одну строку, то проблема вот тут:

Код: Выделить всё

FROM dumps, water_line
если water_line нужен только для позапроса, то тут он лишний. Если не только - то нужно использовать JOIN или так:

Код: Выделить всё

SELECT dumps.land_category, water_geom.foo, water_geom.bar
FROM dumps, water_line
WHERE  ST_Intersects (dumps.geom, ST_Buffer (water_line.geom, 100, 'endcap=flat join=round'))

Re: ST_Intersect - more than 1 row returned by subquery

Добавлено: 25 апр 2012, 21:19
SS_Rebelious
Спасибо, заработало!