1

我有table1table2

table1 contains ZipCode (varchar(12)), GeogCol1 (Geography)-spatial index
table2 contains ZipCode (varchar(12)), Product (varchar(12))

我需要从假定包含在两个表中的用户返回Product's一定半径内的所有内容,显示从到每个返回的,并为用户提供按到提供的排序或反向排序的选项。Zipcode ('90266')distanceZipcodeProductProductsdistanceZipcode

查询 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与每个产品的其他信息一起放入,这样查询可以针对单个表进行,会更好吗?

4

1 回答 1

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)

自联接的第三个条件与第一个条件相比是多余的。

不要将它们放在同一张表中 - 您将对数据进行非规范化。

于 2013-01-19T03:49:17.160 回答