SQL Server - 两个查询的相交,都使用WHERE子句

时间:2013-01-19 01:48:19

标签: sql sql-server

我有table1table2

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

1 个答案:

答案 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)

第一个条件是自连接的第三个条件是多余的。

请勿将它们放在同一个表格中 - 您将对数据进行非规范化。