我有两张包含地理数据的表格 我希望将table1连接到table2以获取table1的所有内容,但是使用table2中的额外字段 当我尝试以下内容时:
select a.*, b.field from table1 a
inner join table2 b
on (cast(a.Latitude as float) = cast(b.Latitude as float))
and (cast(a.Longitude as float) = cast(b.Longitude as float))
我没有遇到任何结果,但检查了确切的对 两个表中的拉特多头。
作为一个检查,我加入的只是纬度,然后只是经度和结果,所以这似乎是纬度和经度都加入的问题。
答案 0 :(得分:3)
加入浮点数是完全错误的。如果SQL解析器在尝试执行此操作时返回警告,那将是很好的。问题是浮点数看起来可能相同,但最后一位确实不同。
首先,尝试使用本机类型(应该是十进制或字符):
select a.*, b.field
from table1 a inner join
table2 b
on a.Latitude = b.Latitude and
a.Longitude = b.Longitude ;
如果这不起作用,您可以使用如下逻辑:
select a.*, b.field
from table1 a inner join
table2 b
on a.Latitude between b.Latitude - 0.0001 and b.Latitude + 0.0001 and
a.Longitude between b.Longitude - 0.0001 and b.Longitude + 0.0001;
0.0001
是一个任意阈值,用于在值略有不同时将值标识为相同。我不确定正确的价值是什么。然而,这相当于最多约36英尺(11米),所以它似乎是一个合理的精度。
故事的寓意是,应使用固定长度的小数精度或使用GIS包中的表示来存储拉特和长篇。
答案 1 :(得分:0)
select a.*, b.field from table1 a
inner join table2 b
on (a.Latitude = b.Latitude and a.Longitude = b.Longitude)
您不需要演员,因为两者都是纬度,并且具有相同的数据类型。