SQL 加入新列后查询不起作用的服务器
SQL Server where query not working after join and new column
这是我当前的工作查询:
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
的检查,但无论我做什么都无法正常工作,我收到错误消息
Invalid column name 'distance'
即使我在 where 查询中尝试。
如何在加入之前以高效的方式执行此操作?
您需要先使用子查询实际创建 table with 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
这应该可以正常工作。
这是我当前的工作查询:
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
的检查,但无论我做什么都无法正常工作,我收到错误消息
Invalid column name 'distance'
即使我在 where 查询中尝试。
如何在加入之前以高效的方式执行此操作?
您需要先使用子查询实际创建 table with 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
这应该可以正常工作。