Sql 无法更新Netezza中ST_INTERSECT查询的表

Sql 无法更新Netezza中ST_INTERSECT查询的表,sql,spatial,many-to-one,netezza,spatial-query,Sql,Spatial,Many To One,Netezza,Spatial Query,基本上,我在Netezza中有两个简单的行数据集,我想创建一个表,其中只包含数据集1中的行,这些行与数据集2中的任何行都不相交 ST_DISJOINT似乎不起作用,它返回成千上万的重复值,我想这是因为Netezza逐行运行查询,每次两条特定的行不相交时都返回一条记录 所以我想我只需要标记数据集1中的每一行,然后使用UPDATE DATSET 1选择没有标记的行,其中ST_与数据集1、数据集2相交 但是,这将返回多对一关系错误。有没有一种方法可以让它只检查第一个intersect或其他东西来阻止它

基本上,我在Netezza中有两个简单的行数据集,我想创建一个表,其中只包含数据集1中的行,这些行与数据集2中的任何行都不相交

ST_DISJOINT似乎不起作用,它返回成千上万的重复值,我想这是因为Netezza逐行运行查询,每次两条特定的行不相交时都返回一条记录

所以我想我只需要标记数据集1中的每一行,然后使用UPDATE DATSET 1选择没有标记的行,其中ST_与数据集1、数据集2相交

但是,这将返回多对一关系错误。有没有一种方法可以让它只检查第一个intersect或其他东西来阻止它尝试为单个记录分配多个值

我觉得可能有一个更简单的解决方案来解决我的问题,从集合1中选择不与集合2中的任何线相交的所有线,任何帮助都将不胜感激


干杯

比较每个包含几何图形的列时,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)