我有一个 Access SQL 查询从纬度和经度输入(类似于商店定位器)中提取结果。在我尝试放入 WHERE 子句之前,它工作得非常好,将结果限制在 XXX 英里(在我的情况下为 3 英里)内的结果。
WHERE distCalc < 3
在不添加子句的情况下,以下查询可以正常工作:
PARAMETERS
[selNum] Long
, [selCBSA] Long
, [cosRadSelLAT] IEEEDouble
, [radSelLONG] IEEEDouble
, [sinRadSelLAT] IEEEDouble;
SELECT B.* FROM (
SELECT A.* FROM (
SELECT
CERT
, RSSDHCR
, NAMEFULL
, BRNUM
, NAMEBR
, ADDRESBR
, CITYBR
, STALPBR
, ZIPBR
, simsLAT
, simsLONG
, DEPDOM
, DEPSUMBR
, 3959 * ArcCOS(
cosRadSelLAT
* cosRadSimsLAT
* cos(radSimsLONG - radSelLONG)
+ sinRadSelLAT
* sinRadSimsLAT
) AS distCalc
FROM aBRc
WHERE CBSA = selCBSA
AND cosRadSimsLAT IS NOT NULL
AND UNINUMBR <> selNum
) AS A
ORDER BY distCalc
) AS B
WHERE B.distCalc < 3
ORDER BY B.DEPSUMBR DESC;
当我添加WHERE distCalc < 3
子句时,我感到害怕
此表达式键入不正确,或者它太复杂而无法计算。
错误。
鉴于该值是在 A 子查询中创建的,我认为它可以在外部 B 查询中用于比较计算。我可以重新计算distCalc
中的WHERE
,但是,我试图避免这种情况,因为我使用的是自定义函数 ( ArcCOS
)。我已经对每一行进行了一次点击,如果可以避免的话,额外的开销会很大。