a.geosid a.Latitude a.Longitude b.Latitude b.Longitude b.geosid
9589565 -36.013472 -71.426018 -36.0135 -71.426 9589565
9586071 -36.015 -71.498 -36.1104 -71.4416 9586071
9589565 -36.013473 -71.426017 -36.0135 -71.426 9589565
上面的数据是通过在sql中运行类似
的查询而形成的SELECT *
FROM [ChileCSVimports].[dbo].[tLocation] a
JOIN AIRGeography..tGeography b
ON a.GeographySID = b.GeographySID
我需要选择数据,如果两个不同的表中的两个长度相差0.0002(分别)或更多,那么不要选择数据 -
答案 0 :(得分:2)
在where
子句中添加过滤器。试试这个。
SELECT *
FROM [ChileCSVimports].[dbo].[tLocation] a
JOIN AIRGeography..tGeography b
ON a.GeographySID = b.GeographySID
Where ABS(a.Latitude - b.Latitude) < 0.0002
and ABS(a.Longitude - b.Longitude) <0.0002
答案 1 :(得分:1)
您可以添加到JOIN
条件或使用WHERE
条件来比较这些值:
SELECT *
FROM [ChileCSVimports].[dbo].[tLocation] a
JOIN AIRGeography..tGeography b
ON a.GeographySID = b.GeographySID
AND ABS(a.Latitude - b.Latitude) < 0.0002
AND ABS(a.Longitude - b.Longitude) < 0.0002
使用ABS()
返回绝对值,这样您就不必担心哪个值比另一个值大。
答案 2 :(得分:0)
听起来相当简单,因为他们都是这两个数字。由于您正在使用内部联接,因此您可以将条件放在联接中:
SELECT *
FROM [ChileCSVimports].[dbo].[tLocation] a
JOIN AIRGeography..tGeography b
ON a.GeographySID = b.GeographySID
AND ABS(a.Latitude - b.Latitude) < 0.0002
AND ABS(a.Longitude - b.Longitude) < 0.0002
...或在单独的WHERE子句中:
SELECT *
FROM [ChileCSVimports].[dbo].[tLocation] a
JOIN AIRGeography..tGeography b
ON a.GeographySID = b.GeographySID
WHERE ABS(a.Latitude - b.Latitude) < 0.0002
AND ABS(a.Longitude - b.Longitude) < 0.0002
无论哪种方式,只需让DB服务器在检索结果集时进行数学运算。这个ABS()函数在大多数具有相同语法的DBMS上都可用; PostgreSQL使用&#34; @&#34;运算符作为简写(@ -5.4
计算为5.4
)。