我有一个几何值表,其中一些行与其他行相交。
我需要一个几何与其他行重叠的行列表,但我希望列表尽可能简洁。
这是设置:
USE tempdb;
DROP TABLE IF EXISTS dbo.t;
CREATE TABLE dbo.t
(
n varchar(100) NOT NULL
, i geometry NOT NULL
);
INSERT INTO dbo.t (n, i)
VALUES ('poly1', geometry::STGeomFromText('POLYGON ((1 2, 1 4, 1 5, 4 6, 1 2))', 4326))
, ('poly2', geometry::STGeomFromText('POLYGON ((1 2, 1 3, 2 5, 4 6, 1 2))', 4326))
, ('poly3', geometry::STGeomFromText('POLYGON ((7 9, 8 7, 9 6, 7 9))', 4326))
SELECT t1.n
, t2.n
FROM dbo.t t1
INNER JOIN dbo.t t2 ON t1.i.STIntersects(t2.i) = 1
WHERE
t1.n <> t2.n;
输出如下所示:
n | n |
---|---|
聚2 | 聚1 |
聚1 | 聚2 |
但是,为了简洁起见,我只想要一行。即因为 poly1 重叠 poly2和poly2 重叠 poly1 我得到两行返回我只想要一个,如:
n | n |
---|---|
聚1 | 聚2 |
然后你需要一个 < 或 > 而不是 <>。
这类似于您尝试在数据中查找骗子
db<>在这里摆弄