我要选择与任何铁路相交的省份。所以我这样做(使用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
)
答案 0 :(得分:3)
您想使用exists
:
SELECT pt.*
FROM ProvinceTable pt
WHERE EXISTS (SELECT 1
FROM RailroadTable rt
WHERE pt.Shape.STIntersects(rt.Shape) = 1
);