我有table1
和table2
。
table1 contains ZipCode (varchar(12)), GeogCol1 (Geography)-spatial index
table2 contains ZipCode (varchar(12)), Product (varchar(12))
我需要返回假定包含在两个表格中的用户Product's
在特定半径内的所有Zipcode ('90266')
,从distance
显示Zipcode
每个都返回Product
,并为用户提供按Products
排序或反向排序distance
到提供的Zipcode
的选项。
查询1-这是我的半径距离查询:
SELECT h.*
FROM table1 g
JOIN table1 h on g.Zipcode <> h.Zipcode AND g.Zipcode = '90266' AND h.Zipcode <> '90266'
WHERE g.GeogCol1.STDistance(h.GeogCol1)<=(10 * 1609.344)
ORDER BY g.GeogCol1.STDistance(h.GeogCol1)
查询2-这是我的产品查询:
SELECT *
FROM table2
WHERE (Active = 1) AND (ProductName LIKE '%54%')
另外,如果我将GeogCol1
空间索引与table2
一起放在每个产品的其他信息中,以便可以针对单个表进行查询,那会更好吗?
答案 0 :(得分:1)
首先,您的第一个查询排除了当前的邮政编码,因此即使邮政编码中提供该产品,我也无法使用下一个邮政编码来获取该产品。对我来说似乎不对。
反正
SELECT t2.Zipcode
,t2.Product
FROM table1 g
INNER JOIN
table1 h ON g.Zipcode <> h.Zipcode
AND
g.Zipcode = '90266'
INNER JOIN
table2 t2 ON (t2.Active=1)
AND
(t2.ProductName LIKE '%54%')
AND
g.Zipcode=t2.Zipcode
WHERE g.GeogCol1.STDistance(h.GeogCol1)<=(10 * 1609.344)
ORDER BY g.GeogCol1.STDistance(h.GeogCol1)
第一个条件是自连接的第三个条件是多余的。
请勿将它们放在同一个表格中 - 您将对数据进行非规范化。