在sql中使用条件连接语句

时间:2015-03-09 19:05:35

标签: sql join conditional

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(分别)或更多,那么不要选择数据 -

3 个答案:

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