Подзапрос вернул более одного значения - STIntersects - PullRequest
0 голосов
/ 30 марта 2020

У меня есть три таблицы

  • 2x таблицы данных точек наблюдения с колонкой точечных геомов (для разных периодов времени)
  • Таблица гексбинов по всей области исследования с столбец многоугольника geom

Оба находятся в одной и той же системе координат.
Таблицы точек всегда пересекаются с шестигранной таблицей. т. е. нет точек вне слоя гексбина.

Выполнение следующего запроса:

UPDATE OBS_MONDAY
SET GRID_ID = (
    SELECT GRID_ID
        FROM SYDHEX s with (index(FDO_Shape))
    WHERE (OBS_MONDAY.Shape.STIntersects(s.Shape) = 1))

Выполняется нормально и вычисляет поле идентификатора GRID из слоя Hexbin в столбец в слое Point.

Однако выполнение этого же запроса к таблице 2-й точки приводит к ошибке:

Подзапрос вернул более одного значения. Это недопустимо, когда подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Может кто-нибудь помочь мне определить проблему здесь, пожалуйста .

enter image description here

1 Ответ

1 голос
/ 30 марта 2020

Вы должны решить, что делать. Обходной путь - использовать SELECT TOP (1) или агрегирование:

UPDATE OBS_MONDAY
    SET GRID_ID = (SELECT TOP (1) GRID_ID
                   FROM SYDHEX s with (index(FDO_Shape))
                   WHERE OBS_MONDAY.Shape.STIntersects(s.Shape) = 1
                  );

Кстати, это не имеет ничего общего с пространственными данными. Вы пытаетесь присвоить одно значение GRID_ID, и ваш подзапрос возвращает более одного значения.

...