Не удается обновить таблицу с ST_INTERSECT Query в Netezza
Итак, в основном у меня есть два простых набора линейных данных в Netezza, я хочу создать таблицу, которая просто включает в себя строки из набора данных 1, которые не пересекаются ни с какими линиями из набора данных 2.
ST_DISJOINT, похоже, не работает, он возвращает тысячи и тысячи повторяющихся значений, я полагаю, это потому, что Netezza запускает запрос строка за строкой и возвращает запись каждый раз, когда две конкретные строки не пересекаются?
Поэтому я решил просто пометить каждую строку из набора данных 1, а затем просто выбрать те, у которых нет флага, используя UPDATE DATSET 1 WHERE ST_INTERSECTS(dataset1,dataset2).
Однако это возвращает многозначную ошибку отношения. Есть ли способ, которым я могу сделать так, чтобы он проверял только первое пересечение или что-нибудь, чтобы остановить его, пытаясь присвоить несколько значений отдельным записям?
Я чувствую, что, возможно, есть более простое решение моей проблемы (выбирая все строки из набора 1, которые никогда не пересекаются ни с какими линиями из набора 2), любая помощь будет принята с благодарностью.
Ура!
1 ответ
ST_DISJOINT вернет логическое значение true или false при сравнении столбцов, каждый из которых содержит геометрию. Я не уверен, что понимаю, как ваши данные хранятся на основе формулировки вашего вопроса, но если ваши таблицы назывались dataset1 и dataset2, каждая из которых имела геометрию, хранящуюся в столбце с именем geoms, вы могли бы использовать следующий подход.
insert into dataset1 values (inza..ST_WKTTOSQL('LineString(0 0, 3 0)'));
insert into dataset1 values (inza..ST_WKTTOSQL('LineString(0 1, 3 1)'));
insert into dataset1 values (inza..ST_WKTTOSQL('LineString(2 2, 3 2)'));
insert into dataset2 values (inza..ST_WKTTOSQL('LineString(0 0, 0 3)'));
insert into dataset2 values (inza..ST_WKTTOSQL('LineString(1 2, 1 3)'));
insert into dataset2 values (inza..ST_WKTTOSQL('LineString(-1 0, -1 4)'));
select count(1) from dataset1 a
where not exists (
select 1 from dataset2 b where inza..ST_DISJOINT(a.geoms,b.geoms)=FALSE
);
COUNT
-------
1
(1 row)
select count(1) from dataset2 a
where not exists (
select 1 from dataset1 b where inza..ST_DISJOINT(a.geoms,b.geoms)=FALSE
);
COUNT
-------
2
(1 row)