首页 > 解决方案 > 连接和新列后查询不起作用的 SQL Server

问题描述

这是我当前的工作查询:

DECLARE @ProductName AS VARCHAR(400) 

SET @ProductName = 'water'
SET @ProductName = CONCAT('\"',@ProductName,'\"') 

SELECT 
    *,
    distance = GEOGRAPHY::Point(42, -90, 4326).STDistance(GEOGRAPHY::Point(latitude, longitude, 4326)) / 1609.344 
FROM 
    products AS FT_TBL 
INNER JOIN 
    FREETEXTTABLE(products, product_name, @ProductName) AS KEY_TBL ON FT_TBL.id = KEY_TBL.[key] 
WHERE 
    KEY_TBL.RANK >= 10 
ORDER BY 
    KEY_TBL.RANK DESC, distance ASC
        

我正在尝试在加入distance < 20之前添加一个检查,但无论我做什么它都不起作用,我收到一个错误

列名“距离”无效

即使我尝试在 where 查询中。

我什至在加入之前如何以有效的方式做到这一点?

标签: sqlsql-serverazure-sql-database

解决方案


您需要先使用子查询来实际创建带有distance列的表,然后再将其包含在 where 子句中。

SELECT * FROM (
SELECT *,
distance = GEOGRAPHY::Point(42, -90, 4326).STDistance(GEOGRAPHY::Point(latitude, longitude, 4326)) / 1609.344 
FROM products ) AS FT_TBL 
INNER JOIN FREETEXTTABLE(products, product_name, @ProductName) AS KEY_TBL ON FT_TBL.id = KEY_TBL.[key] 
WHERE KEY_TBL.RANK >= 10 AND distance < 20 ORDER BY KEY_TBL.RANK DESC ,distance asc

这应该工作得很好。


推荐阅读