SQL - 以最佳方式执行每条记录的操作
SQL - Performing action per record optimal way
我有 2 个 table,其中一个包含带有对象位置的几何列,另一个包含几何格式的点坐标(SQL 服务器)。我需要第二个 table 的每个点从第一个找到最近的对象。我得到了一个可以针对单个点执行此操作的查询:
DECLARE @g geometry = geometry::STGeomFromText('POINT
(1 2,)',0);
SELECT TOP(1) geom.ToString()
FROM [T1].[dbo].[table_shapes]
WHERE geom.STDistance(@g) IS NOT NULL
ORDER BY geom.STDistance(@g);
现在这将给我 table 中最接近该特定点的记录,但我想从我的 table 中找到每个点最接近的形状,而不是点坐标对点进行硬编码,我还想将结果 - 点 - 关联的形状放在新的 table 中。
我正在考虑某种函数,它将遍历每条记录并执行上面的查询,但这可能不是最好的方法,因为它会很慢......
有什么建议可以通过 JOIN 实现吗?
我想你正在找这个,
声明@g geometry = geometry::STGeomFromText('POINT
(1 2,)',0);
select * from mytable tt
CROSS apply(
SELECT TOP(1) geom.ToString()
FROM [T1].[dbo].[table_shapes]
WHERE geom.STDistance(tt.g) IS NOT NULL
ORDER BY geom.STDistance(tt.g)
)ca
为什么要将结果存储在新的 table 中?
只是一个想法,我目前没有任何空间数据库设置。所以这个没有测试。
SELECT s.geom.ToString(), g.geom.ToString()
FROM table_shapes s , (SELECT TOP(1) geom
FROM other_table
WHERE geom geom.STDistance(s.geom) IS NOT NULL
ORDER BY geom.STDistance(s.geom)) g
我有 2 个 table,其中一个包含带有对象位置的几何列,另一个包含几何格式的点坐标(SQL 服务器)。我需要第二个 table 的每个点从第一个找到最近的对象。我得到了一个可以针对单个点执行此操作的查询:
DECLARE @g geometry = geometry::STGeomFromText('POINT
(1 2,)',0);
SELECT TOP(1) geom.ToString()
FROM [T1].[dbo].[table_shapes]
WHERE geom.STDistance(@g) IS NOT NULL
ORDER BY geom.STDistance(@g);
现在这将给我 table 中最接近该特定点的记录,但我想从我的 table 中找到每个点最接近的形状,而不是点坐标对点进行硬编码,我还想将结果 - 点 - 关联的形状放在新的 table 中。 我正在考虑某种函数,它将遍历每条记录并执行上面的查询,但这可能不是最好的方法,因为它会很慢...... 有什么建议可以通过 JOIN 实现吗?
我想你正在找这个,
声明@g geometry = geometry::STGeomFromText('POINT (1 2,)',0);
select * from mytable tt
CROSS apply(
SELECT TOP(1) geom.ToString()
FROM [T1].[dbo].[table_shapes]
WHERE geom.STDistance(tt.g) IS NOT NULL
ORDER BY geom.STDistance(tt.g)
)ca
为什么要将结果存储在新的 table 中?
只是一个想法,我目前没有任何空间数据库设置。所以这个没有测试。
SELECT s.geom.ToString(), g.geom.ToString()
FROM table_shapes s , (SELECT TOP(1) geom
FROM other_table
WHERE geom geom.STDistance(s.geom) IS NOT NULL
ORDER BY geom.STDistance(s.geom)) g