我将选择与任何铁路相交的那些省。所以我这样做(使用SQL Spatial):
SELECT * FROM ProvinceTable
WHERE (
SELECT count(*)
FROM RailroadTable
WHERE ProvinceTable.Shape.STIntersects(RailroadTable.Shape) > 1
) > 0
但这是无效的,因为它必须检查每个铁路几何和省几何之间的交点才能计算出count
。但是,最好在检测到每个第一个交集后立即停止where子句,而无需检查其他子句。这是我的意思:
SELECT * FROM ProvinceTable
WHERE (
--return true if this is true for any row in the RailroadTable:
-- "ProvinceTable.Shape.STIntersects(RailroadTable.Shape) > 1"
)
因此,有没有更好的方法可以重写此查询以实现此目标?
令人惊讶地编辑此查询花费相同的时间,并且不返回任何行:
SELECT * FROM ProvinceTable
WHERE EXISTS (
SELECT *
FROM RailroadTable
WHERE ProvinceTable.Shape.STIntersects(RailroadTable.Shape) > 1
)
您要使用exists
:
SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
FROM RailroadTable rt
WHERE pt.Shape.STIntersects(rt.Shape) = 1
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句